5

Python と、UDP 経由で通信する Twisted ライブラリを使用してサーバーを作成しました。これはすべてうまくいきます。

私がやりたいのは、そのサーバーを拡張して、複数の UDP ポートで同時にメッセージを受け入れることができるようにすることです (返される情報を分離するために異なるポートを使用しますが、要求の送信元についてはあまり重要ではありません)。最初にテストとして最も簡単なことを実行しようとしました - 私は次のようなコードを書きました:

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

(最初の行は元々サーバーにあったものです。2 行目はリッスンする 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

このことから、2 番目の UDP リスナーを追加することはできませんが、それはまさに私がやりたいことです (実際には、合計 18 のリスナーを作成するため - 長い話です)。これを行う方法について何か考えはありますか?

4

1 に答える 1

7

listenUDP() への各呼び出しには、固有のハンドラー インスタンスが必要です。それ以外は、コードは問題なく見えます。

于 2012-07-09T14:43:01.400 に答える