Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x ZMQ绑定到随机端口未按预期工作_Python 3.x_Pyzmq - Fatal编程技术网

Python 3.x ZMQ绑定到随机端口未按预期工作

Python 3.x ZMQ绑定到随机端口未按预期工作,python-3.x,pyzmq,Python 3.x,Pyzmq,我有以下代码: 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: so

我有以下代码:

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

谁能告诉我我做错了什么。这里的文档似乎没有多大帮助。函数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://*')
它应该像预期的那样工作。我已经在本地测试过,它似乎对我有效

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