现在的位置: 首页 > 综合 > 正文

QT TcpSocket 传送结构体

2017年11月24日 ⁄ 综合 ⁄ 共 1383字 ⁄ 字号 评论关闭

最近做个程序,测试的时候需要在tcp里面传送结构体。百度,www.gfsoso.comwww.google.com.hkwww.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*

抱歉!评论已关闭.