[英]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.