最近做个程序,测试的时候需要在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*