2014-09-04 108 views
-1

我已經打破了這個代碼,我無法修復它。服務器/客戶端代碼是由其他人編寫的(主要來自py手冊中的示例),我無法弄清楚什麼是錯誤的。線程化的UDP服務器錯誤

我遇到了super和init以及那個爵士樂的問題,主要是因爲我沒有完全理解並且發現大多數關於這個主題的文檔都讓我比開始時更困惑。現在,我會很高興能夠實現它的工作。這很可能是一個愚蠢的問題,固定在一行。

任何想法?我試着不粘貼代碼不相關,但我可以添加更多或提供整個文件,如果有幫助。當創建一個句柄線程時,代碼會特別落空。我的測試用例正在運行代碼實例,並在它們之間傳遞消息,並在接收到第一個UDP消息時發生。

# Library imports 
import threading 
import SocketServer 
import multiprocessing 

# .. More code here ... 

class ThreadedUDPServer(SocketServer.ThreadingMixIn, SocketServer.UDPServer): 
    pass 


class NodeDaemon(ThreadedUDPServer): 
    def __init__(self, host, port, modules): 
     ThreadedUDPServer.__init__(self, (host, port), NodeProtocolHandler) 

     # Store parameters in the class 
     self.modules = modules 
     self.port  = port 
     self.ip   = host 

     # Check if we have enabled multithreaded listen daemon 
     if settings.MULTI: 
      self.server_thread = multiprocessing.Process(target=self.serve_forever) 
     else: 
      self.server_thread = threading.Thread(target=self.serve_forever) 

     # Make the server thread daemonic 
     self.server_thread.daemon = True 

     # Start the server thread 
     self.server_thread.start() 

     # Update our identity node info 
     self.modules.identity = NodeInfo(host, port) 

    def fetch_modules(self): 
     return self.modules 


class NodeProtocolHandler(SocketServer.BaseRequestHandler): 
    """ 
     Handles nody things. 
     Check https://docs.python.org/2/library/socketserver.html 
     For more sweet deets. 
    """ 
    def __init__(self,*args,**kwargs): 
     super(SocketServer.BaseRequestHandler,self).__init__(args,kwargs) 

     # Grab modules references 
     self.modules = self.server.fetch_modules() 


     # ... More code here .. # 

    def handle(self): 
     """ 
      Main routine to handle all incoming UDP packets. 
     """ 
     # Grab the raw message data received 
     raw_data = self.request[0].strip() 

     # ... More code here ... 

產生的錯誤是:

Exception happened during processing of request from ('127.0.0.1', 60377) 
---------------------------------------- 
Traceback (most recent call last): 
    File "C:\Python27\lib\SocketServer.py", line 593, in process_request_thread 
    self.finish_request(request, client_address) 
    File "C:\Python27\lib\SocketServer.py", line 334, in finish_request 
    self.RequestHandlerClass(request, client_address, self) 
    File "C:\some_dir\node_daemon.py", line 60, in __init__ 
    super(SocketServer.BaseRequestHandler,self).__init__(args,kwargs) 
TypeError: must be type, not classobj 

回答

-1
def __init__(self,*args,**kwargs): 
-  super(SocketServer.BaseRequestHandler,self).__init__(args, kwargs) 
+  SocketServer.BaseRequestHandler.__init__(self,*args, **kwargs)