QDataStream和发送&通过QTcpSocket接收结构

时间:2018-01-03 14:02:53

标签: qt sockets qdatastream

我对如何通过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会有所帮助

1 个答案:

答案 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;