我对如何通过QTcp套接字接收和发送结构感到困惑。
in.startTransaction();
QBytearray data;
in >> data;
if (!in.commitTransaction())
{
qDebug() << "incomplete: " << data;
return;
}
所以说我的数据包看起来像这样,以字节为单位(01 00 00 68 65 6c 6c 6f (
构建我的结构,然后使用 QdataStream 运算符对数据包数据进行反序列化或序列化。
我该怎么做填充...
一些exaxmples会有所帮助
内存中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;