转 http://blog.csdn.net/qm843230255/article/details/78040859 在网络应用中,有时候我们会遇到这样的问题,用TCP不断的接收和发送不同类型的数据,数据大小,格式都不相同,起初看了qt的例子,按照例子写的程序效果相当的不好,尤其是在连续发送大数据的时候,接收端根本无法判断数据是否完整了,也不知道什么时候取读取,经过各种折腾加上看qt源码,总结出了这个方法,发送的时候,要先发送这个数据序列化后的大小,然后发送这个数据本身,接收端,首先收到了要接收数据的大小,心里有数了,等到缓存区的数据大于或者等于要接收数据大小的时候,再过去取数据,就保证了数据的正确完整和及时。最开始的时候,用QByteArry发送数据,先发送了这个QByteArry的size,然后接着发送了这个QByteArry,结果发现了一个很悲剧的事情,一万个数据里面,有几百个数据不完整,找了半天原因才发现,QByteArry在序列化过程中,首先序列化了自身的size,然后才是自身,导致序列化后大小比之前的size大了4,同样QString也是一样,就用一个自定义的结构体来做例子说明,首先自定义结构体 源码:https://github.com/haidragon/QTcpServe
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
QTcpSocket 发送和接收数据的几种方法
QTcpSocket 提供的几种接收和发送数据方法:write ( const
qt5 TCP发送数据 qt 数据 字节流 -
自定义邮件发送
自定义邮件发送
邮件发送 客户端 密码重置 -
自定义广播发送和接收
1、静态注册1)先在 MainActivity 里面 新建一个 含有action 的 intent 2) 在 intent 里面添加键值 、 数据。 3)发送广
Broadcast android 数据 ide