连接时发生Python SocketServer错误
问题描述:
我正在Python 3.1中运行使用socketserver
模块的Python服务器。每次我从客户端获得连接(客户端成功连接)时,我的服务器都会收到错误消息。这里是我的代码:连接时发生Python SocketServer错误
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)
我注意到了有关错误的奇怪的是,它提供了有关第二行中的端口是不是我的端口不同使用。我不确定这里的错误是什么......
感谢您的帮助。
答
尝试调用父类的方法__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
感谢@Adam!我没有意识到我正在覆盖__init__方法。我会接受你的评论作为最好的一次*允许我。但是,我仍然收到错误,因为它需要多个参数......有没有什么办法可以在创建对象时不调用我的代码而不覆盖现有的构造函数? – pajm 2011-04-02 21:24:50
尝试删除'decode()',将其保留为'self.data = self.request.recv(1024).strip()'。看到这里:http://docs.python.org/release/3.1.3/library/socketserver.html#module-socketserver – 2011-04-02 22:00:31