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