我正在尝试覆盖 TCPHandler 类的构造函数,以便可以将变量传递给处理函数,我在堆栈上遇到过其他帖子,但我并不清楚。我必须将一个字节数组传递给handle()
方法中的 sendall 函数,并且在寻找执行上述操作的不同方法时,重写构造函数是最首选的选项。
这是我的代码:
import SocketServer
class MyTCPHandler(SocketServer.BaseRequestHandler):
"""
:file: TCP Handler
:author: Prat, Warsaw, PL
"""
def handle(self):
self.data = self.request.recv(1024).strip()
print "{} Sent: {}".format(self.client_address[0], self.data[0:3])
self.request.sendall(bytearray(self.payload_))
server.server_close()
class superTCPHandler(SocketServer.TCPServer):
def __init__(self,request, client_address, server, payload_):
self.payload_ = (payload_)
SocketServer.TCPServer.__init__(self,request, client_address, BaseRequestHandler, payload_)
def handle(self):
self.data = self.request.recv(1024).strip()
print "{} Sent: {}".format(self.client_address[0], self.data[0:3])
self.request.sendall(self.payload_)
print self.payload_
server.server_close()
if __name__ == "__main__":
print (help(superTCPHandler ))
HOST, PORT = "192.168.4.4", 12345
#server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)
custom_server = SocketServer.TCPServer((HOST, PORT), superTCPHandler, bytearray([114, 100, 100 ,100, 2]))
print "Listening on {}:{}".format(HOST, PORT)
custom_server.handle_request()
当我打印出 时help(superTCPHandler))
,handle()
函数没有显示它的继承,代码编译但什么也不做,或者客户端什么也没收到。我假设handle()
没有从我的自定义类中调用该函数。我确实有一种强烈的感觉,错误出在某个地方__init__
,我用不同的方法尝试了多次,但没有成功。这样做的正确方法是什么?
我不确定是否必须创建基本类(MyTCPHandler)的对象,因此在初始化 custom_server 对象之前我已经注释了服务器对象。我对套接字编程有点陌生,请原谅我的盲目错误。
这是我得到的错误:
custom_server = superTCPHandler((HOST, PORT), superTCPHandler, bytearray([114, 100, 100 ,100, 2]))
TypeError: init () 需要 5 个参数(给定 4 个)
[在 0.1 秒内完成,退出代码为 1]