[英]Windows Sockets understanding recv and send
我在这里有些困惑,说我这样做:
send(serverSocks, "Size: 1348", strlen("Size: 1348"), 0)
然后依次是:
send(serverSocks, "SomeDataThatIs1348LongAndThatNeedsToBeSent", strlen("SomeDataThatIs1348LongAndThatNeedsToBeSent"), 0)
由于它们是连续发送的,所以当我执行以下操作时,我有可能只收到一份:
recv(clientSocks, buf, 2000, 0)
对?
我将如何从服务器端收到它? 还是我什至需要客户端首先将大小发送到服务器? 还是我甚至不知道大小就能接收全部数据?
编辑:
也许我需要澄清我的问题。 我如何判断该数据是客户端发送的第一(或第二)数据的一部分?
由于它们是连续发送的,所以当我执行以下操作时,我有可能只收到一份:
recv(clientSocks,buf,2000,0)
对?
是。
我将如何从服务器端收到它?
您必须以使接收者知道一条消息的结尾和下一条消息开始的方式来构造每条消息。 您可以:
在发送消息的数据之前,先发送消息的长度。 然后,接收器可以先读取长度,然后读取跟随该长度的特定字节数。
在每条消息的末尾添加一个唯一的定界符,这些字符永远不会出现在消息数据本身中,例如ETX字节,空终止符,换行符等。接收方可以读取字节,直到到达定界符为止。
还是我什至需要客户端首先将大小发送到服务器? 还是我甚至不知道大小就能接收全部数据?
TCP是一种流传输,它没有消息边界的概念,因此您必须在传输的数据本身中进行处理。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.