QDataStream readSlot终止符号

时间:2011-04-11 11:37:41

标签: qt sockets stream

此刻我的套接字会话是基于文本的。我用;结束了我的所有对话,有些对话是二进制的。现在我决定让我所有的谈话都是二进制的。我想使用QDataStream作为套接字包装器。那么我应采取什么措施来取代;用法。

e.g。我过去常常检查;。当readyRead被发出时。现在我想我会把缓冲区大小放在缓冲区的底层。但问题是当我得到一些不完整的缓冲区。我可以解析这个大小吗?

1 个答案:

答案 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,你需要做的只是阅读你的数据就像你写的一样简单。

希望有所帮助。