TCP包防粘连的读取方法
来源:互联网 发布:什么是数据科学家 编辑:程序博客网 时间:2024/04/29 06:41
当我们发送TCP包的时候你是一个一个发的,但是当你接收的时候就可能会一下收到多个包,为了防止少接收包,我是用这种方法的:
首先包的前2个字节声明了这个包后面的数据大小。
void TcpClientSocket::OnReceiveMessage(){ QDataStream in(this); in.setVersion(QDataStream::Qt_5_5); while(bytesAvailable()>=sizeof(quint16)){ if(blockSize==0) in>>blockSize; if(bytesAvailable()<blockSize) break; TranslateMessage(); blockSize=0; }}
上面这段代码是我在Qt下写的。
blockSize 是包的数据大小(不包括2字节的数据大小声明)
当数据缓存大于等于2个字节(就是起码可以读到数据声明)时,就进行数据读取。如果blockSize = 0 ,说明这是一个新的数据包,然后首先读取包的大小到blockSize, 然后接下来就是等待缓存大于等于blockSize,然后进行读取 解析数据.
0 0
- TCP包防粘连的读取方法
- 解决TCP报文粘连的方法
- 粘连图像分割的几种方法
- 粘连 Footer 的 5 种方法 | CSS-Tricks
- 粘连 Footer 的 5 种方法 | CSS-Tricks
- 粘连 Footer 的 5 种方法 | CSS-Tricks
- MFC 对话框粘连的实现
- tcp中的粘包、半包的处理方法
- socket中tcp的断包、粘包处理方法
- Halcon中使用OCR时字符的分割以及字符粘连的处理方法
- QT的TCP传文件防止粘包方法
- Android之实现妙趣横生的粘连布局
- sql防注入的方法
- 防采集的有效方法
- PHP防刷新的方法
- 防sql注入的方法
- getResources()方法读取jar包内部的文件
- 读取jar包中资源文件的两种方法
- Ubuntu搭建HelixServer时碰到的一些问题
- SCPPO(五):解决MVC中Json传输数据量问题
- ORG的JSON解析
- soapui笔记10:测试流程控制
- 指针与引用区别
- TCP包防粘连的读取方法
- 【Hive】Hive编程指南(Part 2)
- 面向对象5
- sysfs_create_group使用
- mysql 时间计算器
- [疯狂Java]面向对象:final修饰符(修饰变量、方法、类)
- 百钱买百鸡
- java实现 逆时针打印二维数组
- JNI javah cannot access android.app.Activity 处理方案