在多功能转换插座服务器构造覆盖

在多功能转换插座服务器构造覆盖

问题描述:

我试图重写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()