连接时出现Python SocketServer错误
我正在使用Python 3.1中的连接时出现Python SocketServer错误,python,python-3.x,typeerror,socketserver,Python,Python 3.x,Typeerror,Socketserver,我正在使用Python 3.1中的socketserver模块运行Python服务器。每次我从客户端(成功连接客户端)获得连接时,我的服务器都会收到一个错误。这是我的密码: import socket import socketserver import string import struct class Server(socketserver.BaseRequestHandler): def __init__(self): self.address = self.c
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)
关于这个错误,我注意到一件奇怪的事情,它在第二行上提供的端口与我正在使用的端口不同。我不确定这里的错误是什么
谢谢您的帮助。尝试调用超类的
\uuuu init\uuuu
方法:
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
差不多十年后,我也遇到了同样的问题。(Python 3.9) 多亏了上面投票的答案作为指导,我才发现定制的RequestHandler需要3个参数,因此我必须覆盖3参数
\uuuuu init\uuuu
,如下所示来解决错误
class ServerRequestHandler(socketserver.BaseRequestHandler):
def __init__(self, request, client_addr, server):
# Custom initialisation code here....
super().__init__(request, client_addr, server)
谢谢你,亚当!我没有意识到我正在覆盖init方法。一旦stackoverflow允许,我会接受你的评论。但是,我仍然收到错误,因为它需要不止一个参数。。。在创建对象时,有没有办法在不覆盖现有构造函数的情况下调用我的代码?请尝试删除
decode()
,将其保留为self.data=self.request.recv(1024).strip()
。请看这里: