readSlot终止符号



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

。我过去常常在最后检查;。当readyRead发出时。现在我想把缓冲区大小放在缓冲区的开头。但问题是当我得到不完全缓冲时。

Neel,我向您推荐以下方法:QDataStream有方便的重载"operator>>"one_answers"operator<<"。在这种情况下,我通常做的是定义数据的大小,例如,流的前4个字节。在另一端,我期望读取这4个字节来确定整个数据的大小。

例如一些伪代码(c++风格,但只是给出了你需要的想法,而不是100%的抛光和工作代码):

QByteArray myData = getData();
QDataStream ds(&socket);
ds << myData.size();
// Note: here your data will be encoded and be '' 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,那么您所需要做的就是像编写数据一样简单地读取数据。

希望对你有帮助。

最新更新