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