发明内容
为了解决现有技术的不足,本发明的第一目的是提供一种TCP粘包处理方法,该方法定义TCP传输的数据帧结构,通过对当前帧数据的开头字节的判断,来确定当前帧数据的帧头,从而解决数据完整性以及准确性的问题。
本发明的一种TCP粘包处理方法,该方法适用于网络通信接收方,包括:
接收网络通信发送方按照预定义的TCP传输的数据帧结构打包传输来的数据;
每接收到一帧数据的同时,解析当前帧数据的数据帧结构;
判断接收到的每帧数据的开头字节是否为帧头,若是,则根据预定义的数据帧结构来判定当前帧数据的完整性;否则,保存数据并标记为断包数据段;
若当前帧数据的帧长度等于预定义的数据帧结构长度,则当前帧数据为一个完整帧数据;
若当前帧数据的帧长度大于预定义的数据帧结构长度,则对当前帧数据进行拆解处理,并继续判断拆解处理后最后一段数据的完整性,若不完整,则保存数据并与断包数据段做拼包处理形成一个完整帧的数据。
其中,所述预定义的TCP传输的数据帧结构包括帧头、帧长度和帧校验。
进一步的,对当前帧数据进行拆解处理的过程为:
按预定义的数据帧结构长将当前帧数据拆分成若干段数据;
解析分成的最后一段数据的帧长度,并与预定义的数据帧结构长度比较,若前者等于后者,则当前帧数据进行拆解处理后均拆解成若干个完整帧数据;若前者小于后者,则最后一段数据不完整,则为保存该段数据。
本发明的第二目的是提供一种TCP粘包处理服务器。
本发明的一种TCP粘包处理服务器,该服务器为网络通信接收方服务器,包括:
数据接收模块,其用于接收网络通信发送方按照预定义的TCP传输的数据帧结构打包传输来的数据;
数据解析模块,其用于每接收到一帧数据的同时,解析当前帧数据的数据帧结构;
数据帧头及完整性判断模块,其用于判断接收到的每帧数据的开头字节是否为帧头,若是,则根据预定义的数据帧结构来判定当前帧数据的完整性;否则,保存数据并标记为断包数据段;
若当前帧数据的帧长度等于预定义的数据帧结构长度,则当前帧数据为一个完整帧数据;
若当前帧数据的帧长度大于预定义的数据帧结构长度,则对当前帧数据进行拆解处理,并继续判断拆解处理后最后一段数据的完整性,若不完整,则保存数据并与断包数据段做拼包处理形成一个完整帧的数据。
所述预定义的TCP传输的数据帧结构包括帧头、帧长度和帧校验。
所述数据帧头及完整性判断模块还包括:
数据拆解模块,其用于按预定义的数据帧结构长将当前帧数据拆分成若干段数据;
完整性判断模块,其用于解析分成的最后一段数据的帧长度,并与预定义的数据帧结构长度比较,若前者等于后者,则当前帧数据进行拆解处理后均拆解成若干个完整帧数据;若前者小于后者,则最后一段数据不完整,则为保存该段数据。
本发明的第三目的是提供一种TCP粘包处理***。
本发明的TCP粘包处理***,该***包括TCP粘包处理服务器;
所述TCP粘包处理服务器,被配置为:
接收网络通信发送方按照预定义的TCP传输的数据帧结构打包传输来的数据;
每接收到一帧数据的同时,解析当前帧数据的数据帧结构;
判断接收到的每帧数据的开头字节是否为帧头,若是,则根据预定义的数据帧结构来判定当前帧数据的完整性;否则,保存数据并标记为断包数据段;
若当前帧数据的帧长度等于预定义的数据帧结构长度,则当前帧数据为一个完整帧数据;
若当前帧数据的帧长度大于预定义的数据帧结构长度,则对当前帧数据进行拆解处理,并继续判断拆解处理后最后一段数据的完整性,若不完整,则保存数据并与断包数据段做拼包处理形成一个完整帧的数据。
所述TCP粘包处理服务器与网络通信接收方服务器相连,网络通信接收方服务器将接收到的数据发送至TCP粘包处理器进行处理。
所述预定义的TCP传输的数据帧结构包括帧头、帧长度和帧校验。
所述TCP粘包处理服务器还被配置为:
按预定义的数据帧结构长将当前帧数据拆分成若干段数据;
解析分成的最后一段数据的帧长度,并与预定义的数据帧结构长度比较,若前者等于后者,则当前帧数据进行拆解处理后均拆解成若干个完整帧数据;若前者小于后者,则最后一段数据不完整,则为保存该段数据。
与现有技术相比,本发明的有益效果是:
本发明将接收到的网络通信发送方按照预定义的TCP传输的数据帧结构打包传输来的数据进行解析,得到当前帧数据的数据帧结构;再判断接收到的每帧数据的开头字节是否为帧头,并根据预定义的数据帧结构来判定当前帧数据的完整性,若当前帧数据的帧长度大于预定义的数据帧结构长度,则对当前帧数据进行拆解处理,并继续判断拆解处理后最后一段数据的完整性,若不完整,则保存数据并与断包数据段做拼包处理形成一个完整帧的数据。该方法按定义协议采用递归算法逐层拆、拼处理可以解决TCP传输过程中存在的任意数量、形式的粘包问题,确保传输过程中能及时准确地处理接收到的数据。
具体实施方式
应该指出,以下详细说明都是例示性的,旨在对本申请提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本申请所属技术领域的普通技术人员通常理解的相同含义。
需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本申请的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
图1是本发明的一种TCP粘包处理方法的流程示意图。
如图1所示,本发明的一种TCP粘包处理方法,该方法适用于网络通信接收方,包括:
S101:接收网络通信发送方按照预定义的TCP传输的数据帧结构打包传输来的数据;
其中,所述预定义的TCP传输的数据帧结构包括帧头、帧长度和帧校验。
所谓数据帧(Data frame),指应用层的数据包,它包括三部分:帧头,数据部分,帧尾。其中,帧头和帧尾包含一些必要的控制信息,比如同步信息、地址信息、差错控制信息等;数据部分则包含网络层传下来的数据,比如IP数据包。
S102:每接收到一帧数据的同时,解析当前帧数据的数据帧结构。
具体地,当接收当一帧数据后,其解析方法是利用现有的方法,来分析当前帧的结构包括帧头、帧长度和帧校验,分别得到当前帧的这些信息。
S103:判断接收到的每帧数据的开头字节是否为帧头,若是,则根据预定义的数据帧结构来判定当前帧数据的完整性;否则,保存数据并标记为断包数据段;
若当前帧数据的帧长度等于预定义的数据帧结构长度,则当前帧数据为一个完整帧数据;
若当前帧数据的帧长度大于预定义的数据帧结构长度,则对当前帧数据进行拆解处理,并继续判断拆解处理后最后一段数据的完整性,若不完整,则保存数据并与断包数据段做拼包处理形成一个完整帧的数据。
具体地,对当前帧数据进行拆解处理的过程为:
按预定义的数据帧结构长将当前帧数据拆分成若干段数据;
解析分成的最后一段数据的帧长度,并与预定义的数据帧结构长度比较,若前者等于后者,则当前帧数据进行拆解处理后均拆解成若干个完整帧数据;若前者小于后者,则最后一段数据不完整,则为保存该段数据。
本发明将接收到的网络通信发送方按照预定义的TCP传输的数据帧结构打包传输来的数据进行解析,得到当前帧数据的数据帧结构;再判断接收到的每帧数据的开头字节是否为帧头,并根据预定义的数据帧结构来判定当前帧数据的完整性,若当前帧数据的帧长度大于预定义的数据帧结构长度,则对当前帧数据进行拆解处理,并继续判断拆解处理后最后一段数据的完整性,若不完整,则保存数据并与断包数据段做拼包处理形成一个完整帧的数据。该方法按定义协议采用递归算法逐层拆、拼处理可以解决TCP传输过程中存在的任意数量、形式的粘包问题,确保传输过程中能及时准确地处理接收到的数据。
图2是本发明的一种TCP粘包处理服务器的结构示意图。
如图2所示,本发明的TCP粘包处理服务器,该服务器为网络通信接收方服务器,包括:
(1)数据接收模块,其用于接收网络通信发送方按照预定义的TCP传输的数据帧结构打包传输来的数据;
所述预定义的TCP传输的数据帧结构包括帧头、帧长度和帧校验。
所谓数据帧(Data frame),指应用层的数据包,它包括三部分:帧头,数据部分,帧尾。其中,帧头和帧尾包含一些必要的控制信息,比如同步信息、地址信息、差错控制信息等;数据部分则包含网络层传下来的数据,比如IP数据包。
(2)数据解析模块,其用于每接收到一帧数据的同时,解析当前帧数据的数据帧结构。
(3)数据帧头及完整性判断模块,其用于判断接收到的每帧数据的开头字节是否为帧头,若是,则根据预定义的数据帧结构来判定当前帧数据的完整性;否则,保存数据并标记为断包数据段;
若当前帧数据的帧长度等于预定义的数据帧结构长度,则当前帧数据为一个完整帧数据;
若当前帧数据的帧长度大于预定义的数据帧结构长度,则对当前帧数据进行拆解处理,并继续判断拆解处理后最后一段数据的完整性,若不完整,则保存数据并与断包数据段做拼包处理形成一个完整帧的数据。
其中,所述数据帧头及完整性判断模块还包括:
数据拆解模块,其用于按预定义的数据帧结构长将当前帧数据拆分成若干段数据;
完整性判断模块,其用于解析分成的最后一段数据的帧长度,并与预定义的数据帧结构长度比较,若前者等于后者,则当前帧数据进行拆解处理后均拆解成若干个完整帧数据;若前者小于后者,则最后一段数据不完整,则为保存该段数据。
本发明将接收到的网络通信发送方按照预定义的TCP传输的数据帧结构打包传输来的数据进行解析,得到当前帧数据的数据帧结构;再判断接收到的每帧数据的开头字节是否为帧头,并根据预定义的数据帧结构来判定当前帧数据的完整性,若当前帧数据的帧长度大于预定义的数据帧结构长度,则对当前帧数据进行拆解处理,并继续判断拆解处理后最后一段数据的完整性,若不完整,则保存数据并与断包数据段做拼包处理形成一个完整帧的数据。该方法按定义协议采用递归算法逐层拆、拼处理可以解决TCP传输过程中存在的任意数量、形式的粘包问题,确保传输过程中能及时准确地处理接收到的数据。
本发明的TCP粘包处理***,该***包括TCP粘包处理服务器;
所述TCP粘包处理服务器,被配置为:
接收网络通信发送方按照预定义的TCP传输的数据帧结构打包传输来的数据;
每接收到一帧数据的同时,解析当前帧数据的数据帧结构;
判断接收到的每帧数据的开头字节是否为帧头,若是,则根据预定义的数据帧结构来判定当前帧数据的完整性;否则,保存数据并标记为断包数据段;
若当前帧数据的帧长度等于预定义的数据帧结构长度,则当前帧数据为一个完整帧数据;
若当前帧数据的帧长度大于预定义的数据帧结构长度,则对当前帧数据进行拆解处理,并继续判断拆解处理后最后一段数据的完整性,若不完整,则保存数据并与断包数据段做拼包处理形成一个完整帧的数据。
所述TCP粘包处理服务器与网络通信接收方服务器相连,网络通信接收方服务器将接收到的数据发送至TCP粘包处理器进行处理。
其中,预定义的TCP传输的数据帧结构包括帧头、帧长度和帧校验。所谓数据帧(Data frame),指应用层的数据包,它包括三部分:帧头,数据部分,帧尾。其中,帧头和帧尾包含一些必要的控制信息,比如同步信息、地址信息、差错控制信息等;数据部分则包含网络层传下来的数据,比如IP数据包。
本发明的TCP粘包处理服务器还被配置为:
按预定义的数据帧结构长将当前帧数据拆分成若干段数据;
解析分成的最后一段数据的帧长度,并与预定义的数据帧结构长度比较,若前者等于后者,则当前帧数据进行拆解处理后均拆解成若干个完整帧数据;若前者小于后者,则最后一段数据不完整,则为保存该段数据。
本发明将接收到的网络通信发送方按照预定义的TCP传输的数据帧结构打包传输来的数据进行解析,得到当前帧数据的数据帧结构;再判断接收到的每帧数据的开头字节是否为帧头,并根据预定义的数据帧结构来判定当前帧数据的完整性,若当前帧数据的帧长度大于预定义的数据帧结构长度,则对当前帧数据进行拆解处理,并继续判断拆解处理后最后一段数据的完整性,若不完整,则保存数据并与断包数据段做拼包处理形成一个完整帧的数据。该方法按定义协议采用递归算法逐层拆、拼处理可以解决TCP传输过程中存在的任意数量、形式的粘包问题,确保传输过程中能及时准确地处理接收到的数据。
本领域内的技术人员应明白,本发明的实施例可提供为方法、***、或计算机程序产品。因此,本发明可采用硬件实施例、软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(RandomAccessMemory,RAM)等。
上述虽然结合附图对本发明的具体实施方式进行了描述,但并非对本发明保护范围的限制,所属领域技术人员应该明白,在本发明的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本发明的保护范围以内。