-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