Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我可以在同一个套接字描述符上调用bind()和connect()吗?_C++_C_Visual C++_Network Programming - Fatal编程技术网

C++ 我可以在同一个套接字描述符上调用bind()和connect()吗?

C++ 我可以在同一个套接字描述符上调用bind()和connect()吗?,c++,c,visual-c++,network-programming,C++,C,Visual C++,Network Programming,只是一个关于使用C/C++在Windows应用程序中进行网络套接字编程的奇怪问题: 如何告诉connect()函数使用特定的源IP和源端口值 创建套接字后,应用程序使用sockaddr结构调用connect()到远程IP和端口 connect()函数在内部为连接选择源IP和端口 与其由系统决定connect()的源IP和/或端口,不如让应用程序负责决定绑定到哪个源IP和/或端口 如何告诉connect()函数使用特定的源IP和源端口值 为此,请使用套接字库的bind()函数。是的,对于传出套

只是一个关于使用C/C++在Windows应用程序中进行网络套接字编程的奇怪问题:

如何告诉
connect()
函数使用特定的源IP和源端口值

  • 创建套接字后,应用程序使用
    sockaddr
    结构调用
    connect()
    到远程IP和端口

  • connect()
    函数在内部为连接选择源IP和端口

与其由系统决定
connect()
的源IP和/或端口,不如让应用程序负责决定绑定到哪个源IP和/或端口

如何告诉connect()函数使用特定的源IP和源端口值

为此,请使用套接字库的
bind()
函数。是的,对于传出套接字,您可以在
connect()
之前调用
bind()
。这对于UDP和TCP套接字来说都是完全合法的操作

如何告诉connect()函数使用特定的源IP和源端口值

为此,请使用套接字库的
bind()
函数。是的,对于传出套接字,您可以在
connect()
之前调用
bind()
。这对于UDP和TCP套接字来说都是完全合法的操作。

bind()
请求未使用的端口,以便它可以声明该端口并成为服务器,而
connect()
需要一个已在使用的端口,以便它可以连接到该端口并与服务器通信

正如用户stark所说,如果要指定要使用的接口/端口组合,则需要调用
bind
,但如果希望下一次调用将其绑定到随机可用的端口号,则可以选择退出
bind()
调用,因为客户端不一定要有固定的端口号

在调用
connect()
之前,可以要求内核选择一个特定的端口,但如果我可以问的话-为什么您不想让内核分配源端口,据我所知这不是最佳做法。

bind()
请求未使用的端口,以便它可以声明它并成为服务器,而
connect()
需要一个已经在使用的端口,以便它可以连接到该端口并与服务器通信

正如用户stark所说,如果要指定要使用的接口/端口组合,则需要调用
bind
,但如果希望下一次调用将其绑定到随机可用的端口号,则可以选择退出
bind()
调用,因为客户端不一定要有固定的端口号


在调用
connect()
之前,可以要求内核选择一个特定的端口,但如果我可以问的话-为什么您不希望内核分配源端口,据我所知,这不是最佳做法。

是的,您可以确实有这样做的理由:如果您的路由策略使您的连接从一个您不想使用的IP地址建立,您可以通过
bind(2)
系统调用强制多址/路由主机中的一个特定IP地址作为源。另一个用途是为连接指定一个固定源端口,但这与前一种情况不同


但是要注意:您只能选择一个已经配置好的IP地址,而不是您可以想象的任何地址。

是的,您可以确实有这样做的理由:如果您的路由策略使您的连接从一个您不想使用的IP地址建立,您可以通过
bind(2)
系统调用强制多址/路由主机中的一个特定IP地址作为源。另一个用途是为连接指定一个固定源端口,但这与前一种情况不同


但请注意:您只能选择一个已配置的IP地址,而不能选择任何您可以想象的地址。

如果您想指定要使用的接口/端口组合,则需要调用
bind
。“让应用程序负责决定要绑定的源端口或IP”--请注意,尽管对于要连接的套接字采用这种方法可能确实有一些原因,但它们充其量也很少见。这种连接的源端口在应用程序级别通常不重要,并且源IP很少有很多选项(除非计算机正在连接到自身)。如果要指定要使用的接口/端口组合,则需要调用
bind
。“让应用程序负责决定要绑定到的源端口或IP”——请注意,尽管对于要连接的套接字,可能确实有理由采用这种方法,它们充其量也很少见。这种连接的源端口在应用程序级别通常不重要,而且源IP很少有很多选项(除非机器正在连接到自身)。我脑子里有几个用例:可以将套接字绑定到接口,而不必绑定到端口(这里的端口将在调用connect时选择。)此外,在P2P网络中,在调用connect之前需要显式的端口分配,以启用NAT遍历。我头脑中有几个用例:可以将套接字绑定到接口而不绑定到端口(这里的端口将在调用connect时选择)。此外,在P2P网络中,在调用connect之前需要显式的端口分配以启用NAT遍历。