关于在使用C/C++编写Windows应用程序中的网络套接字编程,有一个好奇的问题:
我该如何告诉connect()
函数使用特定的源IP和源端口值?
创建套接字后,应用程序通过使用
sockaddr
结构调用connect()
来连接到远程IP和端口。connect()
函数内部选择连接的源IP和端口。
与其让系统决定connect()
的源IP和/或端口,不如由应用程序负责决定绑定到哪个源IP和/或端口。
关于在使用C/C++编写Windows应用程序中的网络套接字编程,有一个好奇的问题:
我该如何告诉connect()
函数使用特定的源IP和源端口值?
创建套接字后,应用程序通过使用sockaddr
结构调用connect()
来连接到远程IP和端口。
connect()
函数内部选择连接的源IP和端口。
与其让系统决定connect()
的源IP和/或端口,不如由应用程序负责决定绑定到哪个源IP和/或端口。
bind()
请求一个未被占用的端口,以便可以声明该端口并成为服务器;而connect()
则需要一个已被占用的端口,以便可以连接到它并与服务器通信。bind
,尽管如果您希望下一次调用将其绑定到随机可用的端口号,则可以选择退出bind()
调用,因为客户端不一定必须具有固定的端口号。connect()
之前,可以要求内核选择特定的端口,但如果我可以问一下——为什么您不希望内核分配源端口?据我所知,这不是最佳实践。bind(2)
系统调用在多宿主/路由主机中强制指定IP地址作为源。另一个用途是为连接指定固定的源端口,但这不像前面的情况那么常见。
但要注意:您只能选择已经配置好的IP地址之一,而不能选择您可以想象的任何地址。
bind
。 - stark