标题:QTcpSocket数据丢失?
作者:雷小某
日期:2017-10-21 13:48
内容:
系统: Linux deepin(32位)
Qt版本: 5.6.3
问题描述: 目前需要和一个服务端程序对接协议数据, 其中服务端给的协议数据格式类似如下
struct MsgHdr{
uint32 size;
}服务端将消息数据分为消息头+消息体发送给客户端。客户端需要根据服务端发过来的消息头的size来判断消息体的大小,也就是客户端需要执行类型如下操作MsgHdr hdr;
...
socket.read(&hdr, sizeof(hdr));
if(hdr.size > 0){
char *buf = new char[hdr.size];
socket.read(buf, hdr.size);
}
假设服务端向客户端发送了一条消息"hello world.",则服务端执行如下操作// Linux C代码
uint32 size = strlen("hello world.");
write(socket, &size, 4);
write(socket,"hello world.", size);现在比较奇怪的就是,客户端这边第一次read可以读到完整的消息头结构数据,但第二次read却读不到任何数据,通过调试发现在第一次read后bytesAvailable()返回的居然是0,从这个结果看确实是数据丢失了。但是,如果在客户端使用readAll()却能够将消息完整的读出来。
目前遇到这个问题比较困窘,论坛大佬有什么解决方案吗?