2012-07-09 2 views
5

필자는 Python을 사용하여 서버를 작성했으며 UDP를 통해 통신하는 Twisted 라이브러리를 작성했습니다. 이 모든 것이 잘 작동합니다.twisted를 사용하여 여러 UDP 포트를 수신하는 방법은 무엇입니까?

내가 원하는 것은 여러 개의 UDP 포트에서 동시에 메시지를 받아 들일 수 있도록 서버를 확장하는 것입니다. (다른 포트를 사용하여 반환 된 정보를 분리하고 요청 소스에 대해서는 적습니다). 내가 테스트로 먼저 간단한 일을 시도했습니다 -이 보이는 코드를 썼다 :

reactor.listenUDP(port, handler) 
reactor.listenUDP(port+1, handler) 

(첫 번째 줄은 원래 내 서버에 하나입니다, 두 번째 라인이들을 수있는 2 포트 에)

나는, 나는 다음과 같은 얻을 실행합니다.

File "./rspServer.py", line 838, in mainLoop 
    reactor.listenUDP(self.args.port+1, udpHandler) 
File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/twisted/internet/posixbase.py", line 347, in listenUDP 
    p.startListening() 
File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/twisted/internet/udp.py", line 86, in startListening 
    self._connectToProtocol() 
File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/twisted/internet/udp.py", line 106, in _connectToProtocol 
    self.protocol.makeConnection(self) 
File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/twisted/internet/protocol.py", line 665, in makeConnection 
    assert self.transport == None 
AssertionError 

내가 두 번째 UDP 리스너를 추가 할 수없는이 걸릴,하지만 그건 내가하고 싶은 것을 정확히 (사실, 총 18 명의 청취자를 만들려면 긴 이야기입니다.) 이 작업을 수행하는 방법에 대한 의견이 있으십니까?

+0

동일한 핸들러 인스턴스 대신 여러 핸들러 인스턴스를 전달할 수 있습니다. – jfs

+1

Rakis가 질문에 대한 올바른 답변을 남겼습니다. 그러나 이것은 Twisted의 버그이기도합니다. 오류 일지라도 그다지 도움이되지 않는 오류 메시지가 표시되지 않습니다. 그리고 어설 션 오류, 기간을 결코 보지 말아야한다). http://twistedmatrix.com/ – Glyph

답변

7

listenUDP()를 호출 할 때마다 고유 한 핸들러 인스턴스가 필요합니다. 그 외에는 코드가 정상적으로 보입니다.

+1

에서 버그를 보내주십시오. 바로 그 것입니다. 도와 주셔서 감사합니다. 이제 18 개 포트를 적극적으로들을 수있게되었습니다. –

관련 문제