• 4666阅读
  • 4回复

[提问]QT写的客户端。。进行socket通信的时候为啥会发送额外字节? [复制链接]

上一主题 下一主题
离线drok
 
只看楼主 倒序阅读 楼主  发表于: 2013-04-08

    QByteArray block;
    QDataStream out(&block, QIODevice::WriteOnly);
    out<<quint8(0) <<*/ui->usernameEdit->text();//<<quint8('\0');
    out.device()->seek(0);
    out << quint8(block.size() - 1);
    out.writeRawData(block,block.size() - 1);
    tcpSocket.write (block);

为啥发出来的东西开头的两个字节是长度呢?要怎么去掉这个东西?谢谢
离线roywillow

只看该作者 1楼 发表于: 2013-04-08
你如果不在开头把数据的大小先发过去,那另一端收到的数据永远不知道哪是头哪是尾
除非你一次发送的数据永远是固定大小的
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线drok
只看该作者 2楼 发表于: 2013-04-09
回 1楼(roywillow) 的帖子
  QByteArray block;
    QDataStream out(&block, QIODevice::WriteOnly);
    out <<*/ui->usernameEdit->text();
    tcpSocket.write (block);

即使是这样内容开头也会有2位的长度标识。主要是我的服务端不是QT写的。是自己定的通信协议
离线roywillow

只看该作者 3楼 发表于: 2013-04-10
回 2楼(drok) 的帖子
qt往里写的是数据,而不是一个类的实例,写进去就不知道刚才写得究竟是个啥了
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线dbzhang800

只看该作者 4楼 发表于: 2013-04-10
Re:回 1楼(roywillow) 的帖子
引用第2楼drok于2013-04-09 22:53发表的 回 1楼(roywillow) 的帖子 :
  QByteArray block;
    QDataStream out(&block, QIODevice::WriteOnly);
    out <<*/ui->usernameEdit->text();
    tcpSocket.write (block);
.......

这样写必然有额外的长度数据,和socket没关系,具体看QDataStream的Manual

快速回复
限100 字节
 
上一个 下一个