Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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
Qt QDataStream读取插槽终止符号_Qt_Sockets_Stream - Fatal编程技术网

Qt QDataStream读取插槽终止符号

Qt QDataStream读取插槽终止符号,qt,sockets,stream,Qt,Sockets,Stream,目前,我的套接字对话是基于文本的。我以一个结束了我所有的谈话和一些对话是二进制的。现在我决定把我所有的对话都变成二进制的。我想使用QDataStream作为套接字包装器。那么我应该采取什么措施来代替用法 e、 g.我过去经常检查在末尾。当readyRead发出时。现在我想我将把缓冲区大小放在缓冲区的开头。但问题是当我得到一些不完整的缓冲区时。我可以解析大小吗?尼尔,我建议您以下几点:QDataStream具有方便的重载“operator>>”和“操作员坦克。但我的问题是,如果整个流在缓冲区上不可

目前,我的套接字对话是基于文本的。我以一个
结束了我所有的谈话和一些对话是二进制的。现在我决定把我所有的对话都变成二进制的。我想使用
QDataStream
作为套接字包装器。那么我应该采取什么措施来代替
用法


e、 g.我过去经常检查
在末尾。当readyRead发出时。现在我想我将把缓冲区大小放在缓冲区的开头。但问题是当我得到一些不完整的缓冲区时。我可以解析大小吗?

尼尔,我建议您以下几点:QDataStream具有方便的重载“operator>>”和“操作员坦克。但我的问题是,如果整个流在缓冲区上不可用,但我仍尝试取消序列化,该怎么办??我能得到合适的值吗?即使是尺寸位?尼尔,我不确定你说的对,但我猜你担心在另一端得到正确的值。因此,一个示例伪代码可能如下所示:
qint32 size=readDataSize(socket);如果(size>0){…}
并且在readDataSize()函数中,您需要确保读取前四个字节(int类型表示),或者在传递任何其他变量(如long-long或short-int)时读取其适当的大小。该变量将表示流的大小。
QByteArray myData = getData();
QDataStream ds(&socket);

ds << myData.size();
// Note: here your data will be encoded and be '\0' terminated
ds << myData.constData(); 

// so you might want to consider this call
// although since Qt doesn't guarantee exactly myData.size bytes to be written
// its your responsibility to check whether everything is written
ds.writeRawData(myData.constData(), myData.size());
QByteArray myData = getData();
QDataStream ds(&socket);
ds << myData;