系统:
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()却能够将消息完整的读出来。
目前遇到这个问题比较困窘,论坛大佬有什么解决方案吗?