簡體   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