mar*_*k4o 211
不绑定到特定端口,或绑定到端口0,例如sock.bind(('', 0)).操作系统将为您选择一个可用的端口.您可以获取使用的端口sock.getsockname()[1],并将其传递给从属设备,以便它们可以连接回来.
saa*_*aaj 36
为了上述人员解释的片段:
import socket
from contextlib import closing
def find_free_port():
with closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as s:
s.bind(('', 0))
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
return s.getsockname()[1]
Run Code Online (Sandbox Code Playgroud)
Mih*_*otă 11
如果您只需要找到一个空闲端口供以后使用,这里有一个类似于之前答案的片段,但更短,使用socketserver:
import socketserver
with socketserver.TCPServer(("localhost", 0), None) as s:
free_port = s.server_address[1]
Run Code Online (Sandbox Code Playgroud)
请注意,不保证该端口保持空闲状态,因此您可能需要将此代码段和使用它的代码放入循环中。