在多功能转换插座服务器构造覆盖
问题描述:
我试图重写TCPHandler类的构造函数,这样我可以将变量传递给处理函数给出四,预计5个参数,我所遇到的堆栈的其他职位,但他们并不清楚对我来说。我必须通过字节数组中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__() takes exactly 5 arguments (4 given)
[Finished in 0.1s with exit code 1]
答
有一些问题:
- superTCPHandler不是一个处理程序,因为它是从TCPSERVER的。
- 在superTCPHandler中__init_的签名是错误的。
- custom_server不实例化一个派生类TCPSERVER。
下面的代码导出接受一个附加有效载荷参数定制服务器。该参数被添加为服务器实例的成员变量。处理程序检索服务器实例的有效负载。
#!python2
import SocketServer
class MyTCPHandler(SocketServer.BaseRequestHandler):
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.server.payload_))
class superTCPServer(SocketServer.TCPServer):
def __init__(self, server_address, RequestHandlerClass, payload_, bind_and_activate=True):
self.payload_ = payload_
SocketServer.TCPServer.__init__(self, server_address, RequestHandlerClass, bind_and_activate)
if __name__ == "__main__":
HOST,PORT = '',12345
custom_server = superTCPServer((HOST, PORT), MyTCPHandler, bytearray([114, 100, 100 ,100, 2]))
print "Listening on {}:{}".format(HOST, PORT)
custom_server.handle_request()