【发布时间】:2022-01-20 22:48:22
【问题描述】:
假设我们有一个可以接受多个客户端的服务器。首先,它必须创建一个套接字,然后将它与一个端口和一个 IP 绑定,最后监听来自客户端的连接请求。在accept()与客户端建立连接后,服务器会创建一个新套接字来与特定客户端进行通信。我的问题是客户端是否会将其数据发送到它发送初始请求的同一端口,如果不是,它如何知道将其发送到哪里?
【问题讨论】:
-
可能与它发送连接请求的端口相同。
-
您可以使用例如
getsockname获取套接字的本地详细信息,例如其端口号。 -
还请记住,端点由三件事定义:地址、协议和端口号。连接由两个端点定义。这意味着一个端点可以在不同的连接之间“共享”,因为连接的另一端唯一地定义了连接本身。
-
@Someprogrammerdude 如果我说得对,你是说可能有多个连接与一个端口相关联,并且每个服务器客户端都可以通过确保这对(客户端和自身)包含一个自己的客户端。但是既然那个端口有一个监听套接字,为什么它不尝试从已经连接到服务器的客户端接收数据呢?它如何知道他们的数据是用于另一个服务器进程的?
-
通过连接发送的每个数据包都包含其源和目标三元组(地址、协议、端口)。然后系统可以使用源和目标三元组作为唯一连接。然后它使用目标三元组来了解本地系统上的哪个“程序”将数据包发送到,并使用源三元组将数据包放入正确的队列中。