Websockets有时会发送不完整的数据

时间:2016-02-06 15:43:31

标签: c++ tcp websocket

我有一个我用C ++构建的websocket服务器,目前用作基本的聊天服务器。

如果我发送基本的“hi”消息,数据会是这样的:

Binary: 10000001 10000010 10110110 00100110 01100101 01100011 11011110 01001111
Byte size: 8
Decoded: hi

但是时不时会发送完整的消息。这种情况的一个例子如下:

Binary: 10000001 10000010 01110111 00100010 11011011
Byte size: 5

它正在发送正确的数据,但它几乎就像被完全切成两半一样。

我的接收代码如下所示:

while (true)
{
    char buffer[BUFFER_LENGTH] = ""; // (1024)

    recv(*mSocket, buffer, BUFFER_LENGTH, 0);

    // Data decoding code
    // ...
}

我对TCP的理解是协议本身会确保所有数据包都到达目的地。有人可以解释为什么我有数据丢失吗?

1 个答案:

答案 0 :(得分:0)

首先,确保客户端正在刷新。

第二个(如果我理解你的问题),当使用Socket实现WebSocket时,请注意WebSocket不是Socket。您不能仅在服务器中使用TCP套接字调用来从WebSocket客户端检索数据。每个WebSocket send()都会发送WebSocket帧数据。服务器检查传入的字节流,并在WebSocket框架中的适当区域查找"消息数据"。此外,WebSocket数据可能不必在一个WebSocket框架中发送;您还需要检查框架以查看是否需要检查另一个WebSocket框架以完成"消息数据"。有关WebSocket协议,请参阅IETF规范:https://tools.ietf.org/html/rfc6455