Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/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++ 多个应用程序如何使用同一网络端口?_C++_Sockets_Networking_Tcp_Network Programming - Fatal编程技术网

C++ 多个应用程序如何使用同一网络端口?

C++ 多个应用程序如何使用同一网络端口?,c++,sockets,networking,tcp,network-programming,C++,Sockets,Networking,Tcp,Network Programming,我想知道,多个应用程序如何使用同一个网络端口。TCP协议1端口中的AFAIK分配给1个套接字连接。例如,多个internet浏览器如何同时使用端口80/8080? 我可以将多个套接字绑定到同一端口吗?如何在C++中实现这一点? ,TCP端口只能有一个Socket 侦听< /强>连接。当通过accept()或friends建立连接时,将生成一个表示此连接的新套接字,而单个原始侦听套接字将继续侦听。套接字连接通过其本地IP:端口和远程IP:端口的组合进行唯一标识。多个应用程序可以绑定到同一个本地IP

我想知道,多个应用程序如何使用同一个网络端口。TCP协议1端口中的AFAIK分配给1个套接字连接。例如,多个internet浏览器如何同时使用端口80/8080?
我可以将多个套接字绑定到同一端口吗?如何在C++中实现这一点?

,TCP端口只能有一个Socket <强>侦听< /强>连接。当通过
accept()
或friends建立连接时,将生成一个表示此连接的新套接字,而单个原始侦听套接字将继续侦听。

套接字连接通过其本地IP:端口和远程IP:端口的组合进行唯一标识。多个应用程序可以绑定到同一个本地IP:端口,只要它们分别连接到不同的远程IP:端口

如果本地IP:端口已绑定以进行侦听(
bind()
listen()
),则其他套接字仍可以
bind()
绑定到同一本地IP:端口,但前提是使用
SO\u REUSEADDR
(在某些平台上,
SO\u REUSEPORT
)套接字选项。否则,
bind()


当多个客户端套接字
connect()
连接到同一远程IP:端口时,通常不指定本地绑定,这允许
connect()
对随机可用的本地IP:端口执行隐式
bind()
,以避免与其他连接冲突。如果显式调用
bind()
并成功,然后调用
connect()
连接到已连接到本地IP:Port的远程IP:Port,
connect()
将失败。

在TCP这一有状态协议中,连接由元组[源IP、源IP、目的IP、目的端口]唯一定义(请看上面Eugen Rieck的评论)。因此,理论上,每个客户端(或NAT后面的一组客户端)可以通过任何16位端口号(通常减去0-1023之间的端口)连接到服务器


当web服务器在端口80上侦听时(例如)对于传入的HTTP连接,每次客户端尝试向服务器发送HTTP请求时,客户端都会通过不同的客户端端口启动TCP连接。因此,多个应用程序如何使用同一网络端口的答案是,在另一端有一个与@user358145相关的不同端口4,在服务器端,套接字一直在侦听端口80上的连接,并允许同时处理连接。在客户端,套接字的每个实例都需要分配不同的端口,如user3581454在其示例中所示。我是否正确?tcp包的定义元组为(源ip,源端口,目标ip,目标端口)。由于目标部分对于连接的套接字是固定的,(源ip,源端口)连接必须是唯一的。通常,客户端的操作系统可以确保这一点。原则上,您可以在客户端的同一IP/端口上有多个出站连接,只要它们都指向服务器端的不同IP/端口组合。但这通常不会发生,因为您通常不关心客户端端口是什么,since客户端正在尝试与其他人联系。从服务器的POV来看,一旦建立连接,目标参数就会固定。因此,源参数定义连接。+1,套接字对的唯一标识是关键。在同一IP和端口上为多个客户端提供服务的服务器需要查看IP和端口您的答案正是我想要的。谢谢您的解释。@PaulGriffiths这太误导人了。TCP需要这样做,而不是服务器。服务器所要做的就是通过请求来自的同一个套接字进行回复。@EJP:这很有意义你可以说,计算机根本不通过网络发送数据,因为这一切都是通过电线和无线电波完成的。这是在我们还没有意识到“服务器”这个事实之前可以引用整个计算机,而不仅仅是运行在计算机上的应用程序,在这种情况下,您的评论将是完全错误的,而不仅仅是“误导”。这个主题的标准线程是@Pacerier,不是真的。这与这个问题非常相切。我将引用。