我正在用 C 编写一个简单的 TCP 客户端和服务器套接字程序。
我不明白的是:在我的客户端代码中,似乎有一个用于接收和发送的单一套接字是可以的。
但是在我的服务器代码中,我需要两个套接字:一个用于接受连接的套接字,另一个用于向客户端发送数据包的套接字。
我不明白这有什么意义。如果我可以使用单个套接字在 A 端发送和接收,为什么我不能在 B 端执行相同操作?
我正在用 C 编写一个简单的 TCP 客户端和服务器套接字程序。
我不明白的是:在我的客户端代码中,似乎有一个用于接收和发送的单一套接字是可以的。
但是在我的服务器代码中,我需要两个套接字:一个用于接受连接的套接字,另一个用于向客户端发送数据包的套接字。
我不明白这有什么意义。如果我可以使用单个套接字在 A 端发送和接收,为什么我不能在 B 端执行相同操作?
一个套接字代表一对端点。一个端点发送的数据由另一个端点接收。
对于 TCP 客户端,1 个套接字就足够了,因为它唯一地代表了客户端绑定到的本地 ip/端口与客户端连接到的远程服务器 ip/端口之间的连接。这就是为什么您可以使用 1 个套接字来发送和接收应用程序数据。
对于 TCP 服务器,1 个套接字是不够的。侦听套接字仅代表服务器接受客户端的本地 ip / 端口,但没有远程客户端连接到此套接字,因此该端点始终为空。您无法在此套接字上发送或接收应用程序数据。
accept()
返回一个新套接字,该套接字代表接受客户端的服务器本地 ip / 端口与该客户端连接的远程 ip / 端口之间的连接。另外,考虑一下当有多个客户端同时连接到服务器时。每个连接都必须唯一地表示。您不能仅使用 1 个侦听套接字上的 1 对端点来做到这一点,因此每个接受的连接都需要一个新套接字。