-1

我对如何通过 QTcp 套接字接收和发送结构感到困惑。

in.startTransaction();

QBytearray data;
in >> data;

if (!in.commitTransaction())
{
    qDebug()  << "incomplete: " << data;
    return;
}

所以说我的数据包看起来像这样(01 00 00 68 65 6c 6c 6f)

构建我的结构,然后使用 qdatastream 运算符反序列化或序列化数据包数据....

我该怎么做填充...

一些例子会有所帮助

4

1 回答 1

1

您在内存中的布局struct是特定于编译器和架构的;不要试图使它与网络数据包中的字节完全匹配,而是在内存中的结构和网络数据包之间显式转换,即通过定义适当的流操作符

QDataStream &operator<<(QDataStream &, const YourClass &)
QDataStream &operator>>(QDataStream &, YourClass &)

这些算子是如何实现的,显然取决于行上的数据和YourClass上的数据,但是给大家举个简单的例子

struct S { int a , b };

QDataStream &operator<<(QDataStream &stream, const S &s) {
    stream << s.a << s.b;
    return stream;
}

QDataStream &operator<<(QDataStream &stream, S &s) {
    stream >> s.a >> s.b;
    return stream;
}

将序列化和反序列化自定义结构 S;

于 2018-01-03T15:48:58.703 回答