2014-09-04 1 views
-1

이 코드는 어떻게 든 고장 났지만 해결할 수 없습니다. 서버/클라이언트 코드는 다른 사람 (주로 py 설명서의 예제)이 작성했으며, 잘못된 것을 해결할 수는 없습니다.스레드 된 UDP 서버 버그

슈퍼와 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)