代码之家  ›  专栏  ›  技术社区  ›  roeegg

我不懂TCP套接字

  •  0
  • roeegg  · 技术社区  · 12 月前

    我正在用C编写一个简单的TCP客户端和服务器套接字程序。

    我不明白的是: 在我的客户端代码中,似乎有一个用于接收和发送的套接字是可以的。

    但在我的服务器代码上,我需要有两个套接字: 用于接受连接的套接字和用于向客户端发送分组的不同套接字。

    我不明白这是怎么回事。如果我可以使用单个套接字在A侧同时发送和接收,为什么我不能在B侧也这样做?

    1 回复  |  直到 12 月前
        1
  •  2
  •   Remy Lebeau    12 月前

    套接字表示 一对 的端点。从一个端点发送的数据由另一个端点接收。

    对于TCP客户端,1个套接字就足够了,因为它唯一地表示客户端绑定到的本地ip/端口和客户端连接到的远程服务器ip/端口之间的连接。这就是为什么您可以使用1个套接字来发送和接收应用程序数据。

    对于TCP服务器,1个套接字是不够的。侦听套接字仅表示服务器接受客户端所在的本地ip/端口,但没有远程客户端连接到此套接字,因此端点始终为空。您无法在此套接字上发送或接收应用程序数据。 accept() 返回一个 套接字,表示接受客户端的服务器本地ip/端口与客户端连接的远程ip/端口之间的连接。此外,还要考虑何时有多个客户端同时连接到服务器。每个连接都必须唯一表示。在一个侦听套接字上只使用一对端点是不可能做到这一点的,因此每个接受的连接都需要一个新的套接字。