Python SocketServer 连接时出错
我正在用Python 3.1的socketserver
模块运行一个Python服务器。每次客户端成功连接时,我的服务器都会收到一个错误。以下是我的代码:
import socket
import socketserver
import string
import struct
class Server(socketserver.BaseRequestHandler):
def __init__(self):
self.address = self.client_address[0]
print("%s connected." % str(self.address[1]))
def handle(self):
message = self.request.recv(1024).decode().strip()
print("%s sent: '%s'" % (self.address,message))
if __name__ == "__main__":
server = socketserver.TCPServer(("localhost",22085), Server)
print("Socket created. . .")
print("Awaiting connections. . .")
server.serve_forever()
这是我遇到的错误:
----------------------------------------
Exception happened during processing of request from ('127.0.0.1', 49669)
----------------------------------------
Traceback (most recent call last):
File "C:\Python31\lib\socketserver.py", line 281, in _handle_request_noblock
self.process_request(request, client_address)
File "C:\Python31\lib\socketserver.py", line 307, in process_request
self.finish_request(request, client_address)
File "C:\Python31\lib\socketserver.py", line 320, in finish_request
self.RequestHandlerClass(request, client_address, self)
TypeError: __init__() takes exactly 1 positional argument (4 given)
我注意到这个错误有点奇怪,因为它第二行提到的端口和我使用的端口不一样。我不太确定这个错误是什么...
谢谢大家的帮助。
2 个回答
1
差不多十年后,我遇到了同样的问题。(Python 3.9)
多亏了上面那个被投票的答案作为参考,我发现自定义的请求处理器需要接收三个参数,所以我必须重写一个带有三个参数的 __init__
方法,像下面这样来解决错误。
class ServerRequestHandler(socketserver.BaseRequestHandler):
def __init__(self, request, client_addr, server):
# Custom initialisation code here....
super().__init__(request, client_addr, server)
4
试着调用一下父类的 __init__
方法:
class Server(socketserver.BaseRequestHandler):
def __init__(self):
self.address = self.client_address[0]
print("%s connected." % str(self.address[1]))
super(Server,self).__init__() # Init your base class