此刻我的套接字会话是基于文本的。我用;
结束了我的所有对话,有些对话是二进制的。现在我决定让我所有的谈话都是二进制的。我想使用QDataStream
作为套接字包装器。那么我应采取什么措施来取代;
用法。
e.g。我过去常常检查;
。当readyRead被发出时。现在我想我会把缓冲区大小放在缓冲区的底层。但问题是当我得到一些不完整的缓冲区。我可以解析这个大小吗?
答案 0 :(得分:0)
Neel,我建议你:QDataStream有方便的重载“operator>>”和“operator<<”。在这种情况下我通常做的是定义数据的大小,例如,流的前4个字节。在另一端,我期望读取这4个字节以确定整个数据大小。
例如一些伪代码(C ++风格,但只是给出并了解你需要的东西,而不是100%抛光和工作代码):
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或可以通过QDataStream发送的任何Qt类型,您可以利用Qt中已经实现的内容并将数据发送到如下简单:
QByteArray myData = getData();
QDataStream ds(&socket);
ds << myData;
在这种情况下,只需在此处http://doc.qt.nokia.com/4.7/datastreamformat.html查看Qt如何将QByteArray写入QDataStream。更多:如果你在第二端有QDataStream,你需要做的只是阅读你的数据就像你写的一样简单。
希望有所帮助。