在本地主机上,我如何select一个免费的端口号码?

我试图玩与进程间通信,因为我不知道如何使用Windows下的命名pipe道我想我会使用networking套接字。 一切都发生在本地 服务器能够在一个单独的进程中启动从站并监听某个端口。 奴隶们做的工作,并把结果提交给主人。 如何找出哪个端口可用? 我假设我不能听港口80或21?

我正在使用Python,如果这削减了select。

谢谢!

不要绑定到特定的端口,或绑定到端口0,例如sock.bind(('', 0)) 。 操作系统将为您select一个可用的端口。 你可以得到使用sock.getsockname()[1]select的端口,并将它传递给从服务器,以便它们可以连接回去。

绑定到端口0.一个从1024到65535的随机空闲端口将被选中。 您可以在bind()之后立即使用getsockname()检索选定的端口。

你可以听你想要的任何端口; 一般来说,用户应用程序应该监听端口1024以上(通过65535)。 如果你有一个可变数量的监听器,最主要的就是给你的应用程序分配一个范围 – 比如说20000-21000,以及CATCH EXCEPTIONS 。 这就是如何在计算机上知道端口是否不可用(换句话说,被另一个进程使用)。

但是,对于您的情况,只要在绑定失败的情况下输出错误消息,您就不应该为监听器使用单个硬编码端口。

还要注意,你的大部分套接字(对于从属)不需要明确地绑定到特定的端口号 – 只有等待接入连接的套接字(比如你​​的主接口)需要作为一个监听器并绑定到一个端口上。 如果在使用套接字之前没有为套接字指定一个端口,则操作系统将为套接字分配一个可用的端口。 当主设备想要响应发送数据的从设备时,发送方的地址在侦听器接收数据时可以访问。

我想你会用这个UDP吗?

为了上面这些人的解释:

 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)) return s.getsockname()[1]