在本地主机上,如何选择一个空闲的端口号?
我正在尝试进行进程间通信,因为我搞不懂在Windows下如何使用命名管道,所以我想用网络套接字来实现。所有操作都是在本地进行的。服务器可以启动一些子进程,并在某个端口上监听。子进程完成工作后,会把结果提交给主进程。我该如何找出哪个端口是可用的呢?我想我不能在80或21端口上监听,对吧?
我在用Python,如果这能缩小选择范围的话。
5 个回答
50
把这个插座(socket)绑定到端口0。这样的话,系统会自动从1024到65535之间选一个空闲的端口给你用。你可以在调用完bind()
之后,使用getsockname()
来获取被选中的端口号。
102
为了方便大家理解上面那些小伙伴们的解释,这里给出一个代码片段:
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]
303
不要绑定到一个特定的端口。相反,绑定到端口0:
import socket
sock = socket.socket()
sock.bind(('', 0))
sock.getsockname()[1]
这样操作系统会为你选择一个可用的端口。你可以通过 sock.getsockname()[1]
来获取被选择的端口,并把它传递给其他需要连接的程序。
sock
是你创建的套接字,由 socket.socket
返回。