使用 socket API 创建 TCP 客户端时,本地主机上的端口用于连接到 TCP 服务器。
所使用的端口似乎无法供另一个 TCP 服务器应用程序绑定并作为服务器运行。
因为用于客户端的端口是动态确定的,它可能是我的应用程序想要用作服务器的端口。
TCP 客户端会动态选择一个可用的端口,防止其他程序在该端口上充当服务器,这是真的吗?
客户端是否能够控制所使用的端口,以确保不占用其他程序需要的端口?
使用 socket API 创建 TCP 客户端时,本地主机上的端口用于连接到 TCP 服务器。
所使用的端口似乎无法供另一个 TCP 服务器应用程序绑定并作为服务器运行。
因为用于客户端的端口是动态确定的,它可能是我的应用程序想要用作服务器的端口。
TCP 客户端会动态选择一个可用的端口,防止其他程序在该端口上充当服务器,这是真的吗?
客户端是否能够控制所使用的端口,以确保不占用其他程序需要的端口?
TCP客户端会动态选择一个端口来使用,以防止其他程序在该端口上成为服务器,这是真的吗?
是的,确实如此。
客户端是否可以控制使用哪个端口,以确保它不占用其他程序所需的端口?
是的,您可以控制,但不应该这样做。使用Bind属性。
好的,事情是这样的:
当您与服务器建立连接时,会打开一个套接字端口,该端口号大于1024。关键是,它将是一个高端口号。
您的服务器不应打开大于1024的TCP端口。基本上,您应该让服务器在低端口上运行。这就是所有http文档告诉我们的。
您还可以检查端口是否已被占用,如果是,则可以在另一个端口上打开服务器套接字。
bind
选择特定的端口。accept()
新套接字时。您永远不能将TCP套接字bind()
到已使用的端口/IP上。关于SO_REUSEADDR
也存在一些混淆,这个套接字选项并不允许端口重用,它只是在要绑定到一个端口的时候放松规则,当该端口只有已经超时的连接时才能使用。