Windows插座理解RECV并发送

Windows Sockets understanding recv and send

本文关键字:并发 RECV 插座 Windows      更新时间:2023-10-16

我在这里有点混乱,说我这样做:

send(serverSocks, "Size: 1348", strlen("Size: 1348"), 0)

,然后是这样:

send(serverSocks, "SomeDataThatIs1348LongAndThatNeedsToBeSent", strlen("SomeDataThatIs1348LongAndThatNeedsToBeSent"), 0)

由于它们是连续发送的,因此当我做类似:

的事情时,我有可能只收到它。

recv(clientSocks, buf, 2000, 0)

对吗?

我将如何从服务器端收到它?还是我什至需要客户端首先将大小发送到服务器?否则我甚至不知道大小不知道整个数据?

编辑:

也许我需要更清楚我的问题。我该如何说这些数据是客户发送的第一个(或第二个)数据的一部分?

由于它们是连续发送的,因此当我做类似:

的事情时,我有可能只收到它。

recv(Clienterocks,Buf,2000,0)

对吗?

是。

我将如何从服务器端收到它?

您必须以接收者知道一条消息结束并下一步开始的方式构架每个消息。您可以:

  1. 在发送消息的数据之前发送消息的长度。然后,接收器可以先读取长度,然后读取遵循长度的特定数字。

  2. 在每个消息的末尾附加一个唯一的定界符,这些内容将永远不会出现在消息数据本身中,例如ETX字节,空终止符,换行式断路等。接收器可以读取字节直到到达定界符为止。

还是我甚至需要客户端首先将大小发送到服务器?否则我甚至不知道大小不知道整个数据?

TCP是流媒体传输,它没有消息边界的概念,因此您必须在传输数据本身中处理它。