Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
QDataStream和发送&;QTcpSocket上的接收结构_Qt_Sockets_Qdatastream - Fatal编程技术网

QDataStream和发送&;QTcpSocket上的接收结构

QDataStream和发送&;QTcpSocket上的接收结构,qt,sockets,qdatastream,Qt,Sockets,Qdatastream,我对如何通过QTcp套接字接收和发送结构感到困惑 in.startTransaction(); QBytearray data; in >> data; if (!in.commitTransaction()) { qDebug() << "incomplete: " << data; return; } in.startTransaction(); QBytearray数据; 在>>数据中; 如果(!in.commitTransact

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

in.startTransaction();

QBytearray data;
in >> data;

if (!in.commitTransaction())
{
    qDebug()  << "incomplete: " << data;
    return;
}
in.startTransaction();
QBytearray数据;
在>>数据中;
如果(!in.commitTransaction())
{

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

QDataStream &operator<<(QDataStream &, const YourClass &)
QDataStream &operator>>(QDataStream &, YourClass &)
QDataStream&运算符(QDataStream&,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;
}
结构{inta,b};
QDataStream&operator为什么你关心填充?你的问题是什么?不清楚你的问题是什么?我该如何处理网络数据包中的空字节?其中一些可能是100+字节或更多字节,具体取决于设备卡。你发布的内容与我所做的类似。因此,对Stream的任何调用都会自动将其发送到套接字,我不必使用将其写入IO套接字…那么,您是在读写数据包,还是只在读数据包?如果您都通过QDataStream进行读写,则网络上以字节为单位的精确布局应该与您无关,“QDataStream 100%独立于主机的操作系统、CPU或字节顺序”(请参阅)。