最近做个程序,测试的时候需要在tcp里面传送结构体。百度,www.gfsoso.com,www.google.com.hk,www.aol.com找了很多帖子。说的好轻松,好轻量,菜鸟级别的和大咖交流就是有困难。好比小学生看《红楼梦》。自己只能一个一个的传结构体里面的成员了,。好了,问题来了,开始几次传送正常,后面就收不到数据了。。
好了, 看代码。
发送端:
void Client::sendMessage() { message message_send; message_send.SN=88; message_send.IP="192.168.1.21"; message_send.Condition="READY"; QByteArray block; QDataStream out (&block,QIODevice::WriteOnly); out.setVersion(QDataStream::Qt_4_3); out<<quint16(0)<<quint8('C')<<message_send.SN<<message_send.IP<<message_send.Condition; out.device()->seek(0); out<<quint16(block.size()-sizeof(quint16)); //tcpSocket *clientConnection = tcpServer->nextPendingConnection(); // connect(clientConnection, SIGNAL(disconnected()),clientConnection, SLOT(deleteLater())); tcpSocket->write(block); tcpSocket->disconnectFromHost(); }
接收端:
void MyThread::readyRead() { message message_rev; QDataStream in(socket); in.setVersion(QDataStream::Qt_4_3); forever{ if(nextBlockSize == 0){ if(socket->bytesAvailable()<sizeof(quint16)) break; in>>nextBlockSize; } if(nextBlockSize==0xFFFF){ break; } if(socket->bytesAvailable()<nextBlockSize) break; quint8 requestType; in>>requestType; if(requestType=='C') in>>message_rev.SN>>message_rev.IP>>message_rev.Condition; } qDebug()<<message_rev.SN<<message_rev.IP<<message_rev.Condition; }
结构体长这样:
struct message{ int SN; QString IP; QString Condition; };
看了2本书,霍亚飞的入门和 GUI QT4 C++,东拼西凑,没水平。还是没能一口气完整的传送结构体。
抛砖引玉,希望大牛们能给出好的办法。
貌似有一下几种:
1,重写in>>,,out<<
2,转换成char*