2012-07-09 17 views
5

私はPythonを使ってサーバを書いており、UDP経由で通信する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港を積極的に聴かせることができます。 –

関連する問題