• 2455阅读
  • 0回复

QTcpSocket数据丢失? [复制链接]

上一主题 下一主题
离线雷小某
 

只看楼主 倒序阅读 楼主  发表于: 2017-10-21
系统: Linux deepin(32位)
Qt版本: 5.6.3

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

快速回复
限100 字节
 
上一个 下一个