2017-10-02 7 views
0

I持って次のコード:ZMQのbind_to_random_portは期待通りに動作しない

context = zmq.Context() 
socket = context.socket(zmq.PAIR) 

communication_string = "{protocol}".format(protocol='tcp://*:') 

port = socket.bind_to_random_port(communication_string, min_port=2000, max_port=8000) 

print(port) 

while True: 
    socket.send_string("Server message to client3") 
    time.sleep(1) 

そして、私は、次のコードを書くとき、私はそれを期待しかし、すべての作品、私は例外

Traceback (most recent call last): 
    File "C:/Users/asaxena/Desktop/communciationExperiments/pair/tr.py", line 14, in <module> 
port = socket.bind_to_random_port(communication_string, min_port=2000, max_port=8000) 
    File "C:\Users\asaxena\AppData\Local\Continuum\Miniconda3\lib\site-packages\zmq\sugar\socket.py", line 256, in bind_to_random_port 
self.bind('%s:%s' % (addr, port)) 
    File "zmq/backend/cython/socket.pyx", line 495, in zmq.backend.cython.socket.Socket.bind (zmq\backend\cython\socket.c:5653) 
    File "zmq/backend/cython/checkrc.pxd", line 25, in zmq.backend.cython.checkrc._check_rc (zmq\backend\cython\socket.c:10014) 
raise ZMQError(errno) 
zmq.error.ZMQError: No such device 

を受け付けております〜へ:

port = "5556" 
context = zmq.Context() 
socket = context.socket(zmq.PAIR) 

socket.bind("tcp://*:%s" % port) 
while True: 
    socket.send_string("Server message to client3") 
    time.sleep(1) 

誰でも私が間違っていることを教えてもらえますか?ドキュメントはここではあまり役立たないようです。 bind_to_random_port関数は、システムによって割り当てられたオープンポートを見つけて使用するべきですが、正しく機能していません。

答えて

1

あなたは、あなたの質問にトレースバックを見てみると...

File "C:\Users\asaxena\AppData\Local\Continuum\Miniconda3\lib\site-packages\zmq\sugar\socket.py", 
line 256, in bind_to_random_port 
    self.bind('%s:%s' % (addr, port)) 

あなたはzmqモジュールはとの接続文字列構築されていることがわかります '%sの:%s' は%(addrは、ポート)。したがって、アドレスtcp://*:を渡すと、tcp://*::1234になります。ダブル:に注意してください。

あなたがいるのでこれに代えて、あなたのコードを変更する場合:期待通りに動作するはずです

communication_string = "{protocol}".format(protocol='tcp://*') 

communication_string = "{protocol}".format(protocol='tcp://*:') 

をあなたはこれを持っています。私はそれをローカルでテストしました。それは私にとってはうまくいくようです。

関連する問題