3

我正在使用socketserverPython 3.1 中的模块运行 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)

我注意到这个错误的奇怪之处在于它在第二行提供的端口与我正在使用的端口不同。我不确定这里的错误是什么......

谢谢您的帮助。

4

2 回答 2

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
于 2011-04-02T21:19:33.457 回答
1

差不多十年后,我遇到了同样的问题。(Python 3.9)

感谢上面投票的答案作为指导,我能够发现 Customized RequestHandler 预计需要 3 个参数,因此我必须__init__按如下方式覆盖 3 参数来解决错误。

class ServerRequestHandler(socketserver.BaseRequestHandler):
    def __init__(self, request, client_addr, server):
                # Custom initialisation code here....
                super().__init__(request, client_addr, server)
于 2021-03-26T01:42:21.030 回答