假设我想在 IPC 的某个端口上运行 TCP/IP 服务。当我将端口号传递给我想要与之通信的进程时,端口号并不重要。获取系统仍然可用的随机、高(通常 > 49152)端口号的最佳方法是什么?POSIX中有什么我可以使用的吗?
我知道 FTP 服务器经常需要这个。
临时端口可以做到这一点。您的操作系统会从空闲端口池中为您分配一个端口。
有一些 C 代码,BSD 许可,在此处执行此操作
在 Python 中,您可以('', 0)
为相同的目的指定一个 socket.AF_INET 地址对,例如sock.bind(('', 0))
如果您尝试绑定到端口号 0,系统会将您的套接字绑定到“临时”随机端口。然后,您可以使用getsockname
(在 C 中)获取端口。
在红宝石中:
s = TCPServer.new('localhost', 0) #You can also use nil instead of 0
s.addr[1] #The obtained port number
你可以使用我的小型 C 库:https ://github.com/yegor256/random-tcp-port
编译它并在你的机器上运行。它将输出一个随机可用的 TCP 端口。
唯一的方法是遍历所需的端口范围,尝试一次将一个套接字绑定到每个端口,直到找到一个成功的端口。