ZMQ bind_to_random_port 未按预期工作
ZMQ bind_to_random_port is not working as expected
我有以下代码:
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 应该找到系统分配的开放端口并使用它,但是它不能正常工作。
如果您查看问题中的追溯...
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, port) 构建连接字符串。因此,如果您将地址 tcp://*:
传递给它,那么您最终会得到 tcp://*::1234
。注意双 :
.
如果您修改代码,而不是这样:
communication_string = "{protocol}".format(protocol='tcp://*:')
你有这个:
communication_string = "{protocol}".format(protocol='tcp://*')
它应该按预期工作。我已经在本地测试过了,它似乎对我有用。
我有以下代码:
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 应该找到系统分配的开放端口并使用它,但是它不能正常工作。
如果您查看问题中的追溯...
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, port) 构建连接字符串。因此,如果您将地址 tcp://*:
传递给它,那么您最终会得到 tcp://*::1234
。注意双 :
.
如果您修改代码,而不是这样:
communication_string = "{protocol}".format(protocol='tcp://*:')
你有这个:
communication_string = "{protocol}".format(protocol='tcp://*')
它应该按预期工作。我已经在本地测试过了,它似乎对我有用。