需求

最近在做一个 tcp demo 的时候,发现直接 read 没有问题,但是当使用 QDataStreamcommitTransaction 来读取,返回的就是 false 这个就比较奇怪。

解决

通过 wireshark 抓包,发现 server 数据是已经发出来了,只是 client 解析错误。重新检查发送部分的代码,经过调整后,发现,向 QDataStream 里面写数据的时候,只能写 QString, 如果直接写字符串,就会读取错误。直接对比两种情况的打印,也发现,确实两种情况下,保存到 QByteArray 中的数据是不一样的。

参考

Question about QDataStream and its functions startTransaction and commitTransaction

QIODevice 类 - 什么是设备?

什么是序列化?

Serializing Qt Data Types

QDataStream 类 - 序列化工具