码迷,mamicode.com
首页 > 其他好文 > 详细

Qt入门之小心read()给你设下的陷阱

时间:2014-06-19 11:13:54      阅读:342      评论:0      收藏:0      [点我收藏+]

标签:qt   结构体收发   qbytearray转结构体   read缓冲区   

最近帮学长写了个Qt Tcpsocket客户端的应用程序,被一个问题困扰了许久.因为以前没有用Qt 写过socket的客户端程序

加上时间比较紧,都没能好好的查看些资料就急忙的写代码,看了一些别人的代码,差不多都是相同的,但是我就出现了收数据

不全的问题..

最后查出原因是我在接受服务器端的数据时使用了read()这个函数,接收的是个结构体,这里顺便说下怎么在Qt 下收发结构体

发:

clientsocket->write((char *)&CardInfo, sizeof(CardInfo))
收:
clientsocket->read((char *)&CardInfo, sizeof(CardInfo));
要对结构体CardInfo进行强制类型转换.

开始我就用了clientsocket->read((char *)&CardInfo, sizeof(CardInfo)); 这个函数来接收数据.. 这里就涉及到了read()的缓冲区问题了

起先我并不知道read()是从缓冲区里区数据的.所以有时候我收数据的时候这能收到这结构体的一部分,所以会造成数据的丢失.

后来选择了用readAll()函数,但用它就要考虑怎么把QBytesArray转换成结构体了. 纠结了许久, 直接用了memcpy函数来解决了

void inputpanel::receive()
{

    QByteArray data;
    data = clientsocket->readAll();
    memcpy(&CardInfo, data, sizeof(CardInfo));

}
主要也就遇到这个问题.其他的都没什么了.

Qt入门之小心read()给你设下的陷阱,布布扣,bubuko.com

Qt入门之小心read()给你设下的陷阱

标签:qt   结构体收发   qbytearray转结构体   read缓冲区   

原文地址:http://blog.csdn.net/demetered/article/details/30099611

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!