我有一个websocket服务器,我用C++构建,目前用作基本的聊天服务器。现在Websockets有时发送不完整的数据
Binary: 10000001 10000010 10110110 00100110 01100101 01100011 11011110 01001111
Byte size: 8
Decoded: hi
但每然后它不会发送完整的消息:
如果我发送一个基本的“喜”消息中的数据会喜欢这个。这种情况的一个例子是如下:
Binary: 10000001 10000010 01110111 00100010 11011011
Byte size: 5
它发送正确的数据,但它几乎一样,如果它已经在半完全切断。
我recieving代码看起来是这样的:
while (true)
{
char buffer[BUFFER_LENGTH] = ""; // (1024)
recv(*mSocket, buffer, BUFFER_LENGTH, 0);
// Data decoding code
// ...
}
我的TCP的理解是,协议本身将确保所有的数据包到达目的地。有人可以解释为什么我有数据丢失?
您确定错误位于接收端而不是发送端吗?此外,TCP套接字是*流*,没有固定的数据包边界,这意味着一个'recv'调用可以接收少于完整的消息,并且您需要在循环中调用'recv'直到您收到完整的消息。这就是为什么建立在TCP之上的协议通常有一个精心指定的头部,通常包含有效负载的长度。 –
TCP是基于流的,所以你不会确切地知道每次你接收到你的协议消息。可能有两条消息,或者一条消息 - 在这种情况下,如果你再次接受,你会得到下半场。也可能是您的C++服务器在发送每条消息后不刷新。 – Kenney
啊,对。我明白了,谢谢。那一定是这样,我只是一次调用它。 – user1157885