我有一个我用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的理解是协议本身会确保所有数据包都到达目的地。有人可以解释为什么我有数据丢失吗?
答案 0 :(得分:0)
首先,确保客户端正在刷新。
第二个(如果我理解你的问题),当使用Socket实现WebSocket时,请注意WebSocket不是Socket。您不能仅在服务器中使用TCP套接字调用来从WebSocket客户端检索数据。每个WebSocket send()都会发送WebSocket帧数据。服务器检查传入的字节流,并在WebSocket框架中的适当区域查找"消息数据"。此外,WebSocket数据可能不必在一个WebSocket框架中发送;您还需要检查框架以查看是否需要检查另一个WebSocket框架以完成"消息数据"。有关WebSocket协议,请参阅IETF规范:https://tools.ietf.org/html/rfc6455