标签: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 结构体收发 qbytearray转结构体 read缓冲区
原文地址:http://blog.csdn.net/demetered/article/details/30099611