我已經使用Python和Twisted庫通過UDP進行通信編寫了一個服務器。這一切運作良好。如何使用扭曲來偵聽多個udp端口?
我想要做的是擴展該服務器,以便它可以同時接受多個UDP端口上的消息(我使用不同的端口來隔離返回的信息,而不是關於請求的來源)。我試着先做簡單的事情作爲一個測試 - 我寫的代碼看起來像這樣:
reactor.listenUDP(port, handler)
reactor.listenUDP(port+1, handler)
(第一行是一個原本在我的服務器;第二行是第二個端口監聽到)
當我跑,我得到如下:
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個聽衆 - 這是一個很長的故事)。有關如何做到這一點的任何想法?
您可以傳遞多個處理程序實例而不是同一個 – jfs 2012-07-09 14:32:08
Rakis已經爲您的問題留下了正確的答案,但這也是Twisted中的一個錯誤 - 即使它是一個錯誤,您也不應該得到如此無用的錯誤消息(你永遠不應該看到一個斷言錯誤,句點)。請在http://twistedmatrix.com/ – Glyph 2012-07-09 18:34:55