繁体   English   中英

从TCP套接字读取

[英]Reading from TCP socket

我必须从TCP套接字接收数据。 它具有固定的16字节标头(一个标头的字段是数据长度)和数据。 我是通过BigEndian收到的,但是是通过LittleEndian发送的。

对于这种数据接收,我找不到很好的解决方案。 现在对我有用的是(读取标头字段之一):

QByteArray packetType = tcpSocket->read(2);
QDataStream in(packetType);
in.setByteOrder(QDataStream::LittleEndian);
quint16 pT = 0;
in >> pT;

有没有更好的方法来设置QByteArray的字节序? 还是使用QDataStream读取指定数量的字节的方法?

您几乎做对了。 中间的QByteArray是不必要的。 您可以直接在套接字上设置数据流:

QTcpSocket socket;
QDataStream in(&socket);
in.setByteOrder(QDataStream::LittleEndian);
...
void onReadyRead() {
  in.startTransaction();
  uint16_t packet_type;
  in >> packet_type;
  if (in.status == QDataStream::Ok) {
    if (packet_type == Foo) {
      uint32_t foo_data;
      in >> foo_data;
      if (! in.commitTransaction())
        return; // not enough data
      // got a full packet here
    }
  }
  in.abortTransaction();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM