本发明涉及tcp报文处理,具体是一种避免粘包的tcp报文传输方法及处理终端。
背景技术:
1、在计算机网络通信中,tcp协议是一种可靠的、面向连接的传输层协议,主要用于数据在不同计算机之间的传输。在tcp通信过程中,报文是基本的数据传输单元,报文的长度可不固定,接收端接收端tcp报文后需要从字节数组中将多个数据包分离开。但没有经过处理的tcp报文,如果直接进行数据包分离,经常会出现粘包情况而使得数据传输出错。另外,现有的一些tcp报文处理技术中,往往是循环遍历接收到的tcp报文中的每个字节是否符合特定条件来分离报文,这种方法可以一定程度上避免粘包情况,但是处理效率低且容易出现数据包丢失。为此,需要一种处理效率高、不易出现数据包丢失的避免粘包的tcp报文处理技术。
技术实现思路
1、针对现有技术的不足,本发明的目的是提供一种避免粘包的tcp报文传输方法及处理终端,其能够解决背景技术描述的问题。
2、实现本发明的目的的技术方案为:一种避免粘包的tcp报文传输方法,包括如下步骤:
3、步骤1:接收包括tcp报文的字节数组recbytes;
4、步骤2:判断当前接收到的字节数组recbytes是否满足条件一,若是,则返回listbytes集合后,结束处理,listbytes集合初始为空,若否,则继续执行步骤3,其中,listbytes集合用于存储tcp报文中的有效数据包,
5、条件一:字节数组recbytes为空且长度小于预设报文头部的长度judgebytes;
6、步骤3:遍历字节数组recbytes中的每个字节,从第一个字节开始,判断当前字节是否符合条件二,若是,则将当前字节至当前字节向后移动预设字节长度之间的所有字节构成一个有效数据包,并将有效数据包存入所述listbytes集合,且从当前字节移动预设字节长度后的字节作为新的当前字节,继续判断新的当前字节是否符合条件二,直至将所有字节划分到有效数据包或者舍弃,若否,则舍弃当前字节,并且将下一个字节作为新的当前字节,继续判断新的当前字节是否符合条件二,
7、条件二:起始字节为tcp报文的协议头部的第一个字节,且从当前字节往后经预设报文头部的长度judgebytes后的字节未超出字节数组recbytes的范围;
8、步骤4:提取listbytes集合中的有效数据包,将有效数据包长度和预设报文头部的长度judgebytes一致的数据包作为最终有效数据包,从而完成tcp报文传输。
9、进一步地,预设报文头部包括若干自己,每个字节或多个字节共同构成一个含义,含义为自定义。
10、进一步地,预设报文头部设置为{0x42,0x4c,0x03,0x00,0x03},包含5个字节,0x42和0x4c共同组成tcp报文的协议头部,第三个字节0x03表示配置长度,0x00表示设备类型大类,第五个字节0x03表示设备类型小类。
11、一种处理终端,其包括:
12、存储器,用于存储程序指令;
13、处理器,用于运行所述程序指令,以执行所述避免粘包的tcp报文传输方法的步骤。
14、本发明的有益效果为:本发明通过自定义固定长度的tcp报文的报文头部来分离(即切片)tcp报文,可以快速准确地识别出tcp报文,并且能够有效第判断数据包的完整性,只有在数据包长度和数据字段均相符情况下,才会认定该数据包是完整的,从而提高tcp报文处理的可靠性和避免粘包。
1.一种避免粘包的tcp报文传输方法,其特征在于,包括如下步骤:
2.根据权利要求1所述的避免粘包的tcp报文传输方法,其特征在于,预设报文头部包括若干自己,每个字节或多个字节共同构成一个含义,含义为自定义。
3.根据权利要求2所述的避免粘包的tcp报文传输方法,其特征在于,预设报文头部设置为{0x42,0x4c,0x03,0x00,0x03},包含5个字节,0x42和0x4c共同组成tcp报文的协议头部,第三个字节0x03表示配置长度,0x00表示设备类型大类,第五个字节0x03表示设备类型小类。
4.一种处理终端,其特征在于,其包括: