您好,欢迎来到五一七教育网。
搜索
您的当前位置:首页一种基于TCP协议的通讯文本数据传输方法[发明专利]

一种基于TCP协议的通讯文本数据传输方法[发明专利]

来源:五一七教育网
(19)中华人民共和国国家知识产权局

(12)发明专利申请

(10)申请公布号 CN 1098130 A(43)申请公布日 2019.05.28

(21)申请号 201811609253.3(22)申请日 2018.12.27

(71)申请人 南京信息职业技术学院

地址 210023 江苏省南京市仙林大学城文

澜路99号(72)发明人 何淼 董志勇 

(74)专利代理机构 南京天翼专利代理有限责任

公司 32112

代理人 汤志武(51)Int.Cl.

H04L 29/06(2006.01)

权利要求书2页 说明书5页 附图1页

(54)发明名称

一种基于TCP协议的通讯文本数据传输方法(57)摘要

一种基于TCP协议的通讯文本数据传输方法,通过自定义报文格式,在客户端和服务器端传输文本数据,将文本数据转换为数据单元的格式后再传输,报文包括数据头、数据体长度和数据体三部分,数据头为定位标志、数据体长度记录了数据体占用空间的字节数,数据体由若干数据单元构成,每个数据单元包括字段编码、字段长度和字段内容,报文中的所有数据都为二进制格式,其中数据头、数据长度、数据单元的“字段编码”均为固定长度的二进制数,对文本数据的解析通过建立字段名称和字段编码的方式实现。

CN 1098130 ACN 1098130 A

权 利 要 求 书

1/2页

1.一种基于TCP协议的通讯文本数据传输方法,客户端和服务器端采用TCP协议传输数据,客户端使用某种数据格式对数据进行编码,然后向服务器发送编码数据,服务器接收到数据后在对数据进行解码,其特征在于:通过自定义报文格式,在客户端和服务器端传输文本数据,将文本数据转换为数据单元的格式后再传输,报文包括数据头、数据体长度和数据体3部分。数据头为定位标志、数据体长度记录了数据体占用空间的字节数,数据体由若干数据单元构成,每个数据单元包括字段编码、字段长度和字段内容3类信息。报文中的所有数据都为二进制格式,其中数据头、数据体长度以及数据单元里的“字段编码”均为固定长度的二进制数,文本数据的转换和解析通过建立字段名称和字段编码的对应哈希关系方式实现,其中字段名称为字段编码所表示数据的哈希名称;

数据传输过程如下:步骤一、客户端将文本数据读取到内存中,并将其转换为KeyValue对象,一个KeyValue对象表示一条文本数据,一个KeyValue对象包括多个条目,每个条目都是一个字段名称和字段内容的键值对,键值对的字段名称和字段内容都为文本类型;

步骤二、客户端对KeyValue对象中的每个条目进行编码,编码的目的是将文本类型的条目转换为二进制数据:首先将字段名称转换为二进制的编码,记为A,然后将字段内容转换为byte类型的数组,记为B,最后计算数组B的长度,记为C,重复以上操作,对步骤一所述的所有的条目都做相应的处理;

步骤三、客户端将编码A、数组B和长度C组装成数据单元,其中编码A对应数据单元的“字段编码”,长度C对应数据单元的“字段长度”,数组B对应数据单元的“字段内容”,重复以上操作形成数据体,记为T,然后计算数据体的的长度,记为L,最后将数据头、数据长度L和数据体T组装成一个二进制数组;

步骤四、客户端向服务器端发起TCP连接,然后将二进制数组发送到服务器端;步骤五、服务器端收到二进制数组后,对该数组进行解析,分别解析出数据头、数据长度L和数据体T;

步骤六、对数据体T进行解析,解析出字段编码、字段长度及字段内容;步骤七、将字段编码通过查找hash表转换为字段名称,然后将字段名称和字段内容生成KeyValue对象,最后将KeyValue对象转换为文本数据。

2.根据权利要求1所述的基于TCP协议的通讯文本数据传输方法,其特征在于:在执行步骤一之前,首先建立字段名称和字段编码的对应关系,假设文本数据为“user=abc,password=ABCD”,通过哈希表建立字段名称和字段编码的对应关系,创建该文本数据对应的哈希表H{},在客户端和服务器端均需要执行,服务器端和客户端都有统一的hash表;步骤一中,KeyValue对象也是一个哈希表,该哈希表的内容是{}。

3.根据权利要求1或2所述的基于TCP协议的通讯文本数据传输方法,其特征在于:所述客户端对KeyValue对象中的每个条目进行编码,首先取出条目,查找哈希表H获得字段名称“user”对应的字段编码0x01,然后将字符串“abc”通过UTF8编码的规则转换为二进制数组[0x61,0x62,0x63],接着计算出字符串“abc”的长度值3,重复以上操作,完成对条目的处理,其中字段名称“password”对应的字段编码为0x02,字符串“ABCD”转换为二进制数组[0x41,0x42,0x43,0x44]。

2

CN 1098130 A

权 利 要 求 书

2/2页

4.根据权利要求3所述的基于TCP协议的通讯文本数据传输方法,其特征在于:所述客户端将每个条目编码后的二进制数据组装成数据单元,首先创建数据单元的的内存,然后将条目对应的二进制编码数据拷贝到数据单元的内存的起始位置,然后顺序拷贝条目对应的二进制编码数据到内存中,完成以上操作后,数据单元的数据分别为:数据单元1:[0x01,0x03,0x61,0x62,0x63]和数据单元2:[0x02,0x04,0x41,0x42,0x43,0x44]。

5.根据权利要求4所述的基于TCP协议的通讯文本数据传输方法,其特征在于:将创建的数据单元1和数据单元2两个数据单元数据合并为数据体,数据体的数据为[0x01,0x03,0x61,0x62,0x63,0x02,0x04,0x41,0x42,0x43,0x44],然后计算出数据体的长度为11个字节,假设数据头为二个字节的固定值[0xFF,0xEE],则对数据头、数据长度、数据体进行组装,形成发送数据报文[0xFF,0xEE,0x0B,0x01,0x03,0x61,0x62,0x63,0x02,0x04,0x41,0x42,0x43,0x44]。

6.根据权利要求1或4所述的基于TCP协议的通讯文本数据传输方法,其特征在于:服务器端为了完整地接收数据,服务器端首先创建接收缓冲区,当缓冲区中接收到两个字节的数据后,将接收到的数据和[0xFF,0xEE]进行比较,如果不相符,则丢弃数据;如果相符,则继续接收第三个字节的数据,并根据第三个字节的数据创建第二个缓冲区,第二个缓冲区的大小由第三字节的数据确定,当第二个缓冲区已满,表示数据体数据已接收完整,此时数据体的数据为[0x01,0x03,0x61,0x62,0x63,0x02,0x04,0x41,0x42,0x43,0x44]。

7.根据权利要求1或6所述的基于TCP协议的通讯文本数据传输方法,其特征在于:所述从数据体T的数据中解析出数据单元,根据字段编码、字段长度、字段内容的顺序分别解析出数据单元1的数据[0x01,0x03,0x61,0x62,0x63]和数据单元2的数据[0x02,0x04,0x41,0x42,0x43,0x44]。

8.根据权利要求7所述的基于TCP协议的通讯文本数据传输方法,其特征在于:所述对数据单元1的数据[0x01,0x03,0x61,0x62,0x63]进行解析,根据字段编码0x01查找哈希表H{},获得对应的字段名称“user”,然后提供UTF8对[0x61,0x62,0x63]进行解码,获得字段值“abc”,对数据单元2的数据[0x02,0x04,0x41,0x42,0x43,0x44]做同样的操作,根据数据单元1和数据单元2解析后的数据创建KeyValue对象,该对象的值为{}。

9.根据权利要求8所述的基于TCP协议的通讯文本数据传输方法,其特征在于:遍历KeyValue中的数据,发布提取出Hash表的key值和value值,并将这些值拼接出文本数据“user=abc,password=ABCD”。

3

CN 1098130 A

说 明 书

一种基于TCP协议的通讯文本数据传输方法

1/5页

技术领域

[0001]本发明涉及互联网数据传输,尤其涉及一种基于TCP协议的通讯文本数据传输方法, 属于互联网领域。背景技术

[0002]TCP协议是一种面向连接的、可靠的、基于字节流的传输层通信协议,用于实现端对 端的可靠性数据传输,由IETF的RFC793定义,包括排序、重复包丢弃、丢包重传、流 控制和拥塞控制等功能,TCP协议是互联网的重要基础。[0003]微服务是计算机系统的一种组织方式,一个大型复杂软件应用由一个或多个微服务单 元组成。在微服务架构中,每个微服务单元有的进程空间和资源,每个微服务都有自 己的通讯机制,可以部署在单个或多个服务器上。微服务架构具有组件化、松耦合、自治、 去中心化等特点。

[0004]在一个微服务系统中会存在大量的微服务单元,这些微服务单元之间需要进行大量的 文本数据的交换,如何提高微服务单元之间数据交换的效率是微服务系统要考虑的一个重 要因素。微服务单元之间一般基于即客户端/服务器模式(即C/S)发送数据,客户端和服 务器端通常使用TCP协议传输数据,客户端使用某种数据格式对数据进行编码,然后向服 务器发送编码数据,服务器接收到数据后在对数据进行解码。

[0005]客户端和服务器端发送的数据格式通常可以采用市面主流XML、JSON和其他自定义格 式等方式。XML(ExtensibleMarkup Language)数据格式的数据包相对较大,其包含了大 量重复标记内容,会占用较多的网络带宽资源。JSON(JavaScript Object Notation)数 据格式相对XML而言,数据格式更加轻量,数据的层次结构清晰,但JSON数据的解析要 遵循JSON格式的语法要求,在数据传输性能要求较高的情况下,JSON数据的序列号与反 序列号操作需要对JSON语法格式进行解析,占用较多的系统资源,降低了系统的效率。发明内容

[0006]本发明提出了一种基于TCP协议的通讯文本数据传输方法,通过自定义报文格式的方 式在客户端和服务器端传输文本数据,既避免了XML格式数据解析的低效率,也避免了 JSON格式数据序列化和反序列化占用较大系统资源的问题,具有传输效率高、实现方式 简单、扩展性强等优点。[0007]自定义格式,顾名思义是设计者根据不同数据使用场景下,为提高数据使用效率而针 对性的进行数据格式定义,客户端和服务器端按照这个自定义的格式解析数据,因这里的 数据格式受使用场景制约,且使用外部条件和技术指标均不一样,故自定义数据格式没有 可相互参照性和可比性。[0008]例如:本申请专利所使用场景就是为了满足特定业务场景的数据高效传输的需要,比 如我想把下表中的数据发送给服务器:

4

CN 1098130 A[0009]

说 明 书

2/5页

班级 学号 姓名 软件1701 17001 张三 [0010]这些数据的特点是列的名称基本固定,且列数据不会今天增一列,明天减一列,但行 的数据比较多,今天要发送1万行,明天要发送10万行。在这种情况下,用图2的自定义格 式发送数据,效率就会比xml和json高很多。[0011]本发明采用的技术方案如下:一种基于TCP协议的通讯文本数据传输方法,客户端 和服务器端采用TCP协议传输数据,客户端使用某种数据格式对数据进行编码,然后向 服务器发送编码数据,服务器接收到数据后在对数据进行解码,其特征在于:通过自定义 报文格式,在客户端和服务器端传输文本数据,将文本数据转换为数据单元的格式后再传 输,报文包括数据头、数据体长度和数据体3部分。数据头为定位标志、数据体长度记录 了数据体占用空间的字节数,数据体由若干数据单元构成,每个数据单元包括字段编码、 字段长度和字段内容3类信息。报文中的所有数据都为二进制格式,其中数据头、数据体 长度以及数据单元里的“字段编码”均为固定长度的二进制数,文本数据的转换和解析通 过建立字段名称和字段编码的对应哈希关系方式实现,其中字段名称为字段编码所表示数 据的哈希名称;

[0012]数据传输过程如下:[0013]步骤一、客户端将文本数据读取到内存中,并将其转换为KeyValue对象,一个 KeyValue对象表示一条文本数据,一个KeyValue对象包括多个条目,每个条目都是一个 字段名称和字段内容的键值对,键值对的字段名称和字段内容都为文本类型;[0014]步骤二、客户端对KeyValue对象中的每个条目进行编码,编码的目的是将文本类型 的条目转换为二进制数据:首先将字段名称转换为二进制的编码,记为A,然后将字段内 容转换为byte类型的数组,记为B,最后计算数组B的长度,记为C,重复以上操作,对 步骤一所述的所有的条目都做相应的处理;[0015]步骤三、客户端将编码A、数组B和长度C组装成数据单元,其中编码A对应数据 单元的“字段编码”,长度C对应数据单元的“字段长度”,数组B对应数据单元的“字段内 容”,重复以上操作形成数据体,记为T,然后计算数据体的的长度,记为L,最后将数据 头、数据长度L和数据体T组装成一个二进制数组;[0016]步骤四、客户端向服务器端发起TCP连接,然后将二进制数组发送到服务器端;[0017]步骤五、服务器端收到二进制数组后,对该数组进行解析,分别解析出数据头、数据 长度L和数据体T;[0018]步骤六、对数据体T进行解析,解析出字段编码、字段长度及字段内容;[0019]步骤七、将字段编码通过查找hash表转换为字段名称,然后将字段名称和字段内容 生成KeyValue对象,最后将KeyValue对象转换为文本数据。[0020]在执行步骤一之前,首先建立字段名称和字段编码的对应关系,假设文本数据为“user =abc,password=ABCD”,通过哈希表建立字段名称和字段编码的对应关系,创建该文本 数据对应的哈希表H{},在客户端和服务器端均需要执 行,服务器端和客户端都有统一的hash表;步骤一中,KeyValue对象也是一个哈希表, 该哈希表的内容是{}。

5

CN 1098130 A[0021]

说 明 书

3/5页

所述客户端对KeyValue对象中的每个条目进行编码,首先取出条目

查 找哈希表H获得字段名称“user”对应的字段编码0x01,然后将字符串“abc”通过UTF8编码 的规则转换为二进制数组[0x61,0x62,0x63],接着计算出字符串“abc”的长度值3,重复 以上操作,完成对条目的处理,其中字段名称“password”对应的字段 编码为0x02,字符串“ABCD”转换为二进制数组[0x41,0x42,0x43,0x44]。[0022]所述客户端将每个条目编码后的二进制数据组装成数据单元,首先创建数据单元的的 内存,然后将条目对应的二进制编码数据拷贝到数据单元的内存的起始位置, 然后顺序拷贝条目对应的二进制编码数据到内存中,完成以上操作后, 数据单元的数据分别为:数据单元1:[0x01,0x03,0x61,0x62,0x63]和数据单元2:[0x02, 0x04,0x41,0x42,0x43,0x44]。

[0023]所述将创建的数据单元1和数据单元2两个数据单元数据合并为数据体,数据体的数 据为[0x01,0x03,0x61,0x62,0x63,0x02,0x04,0x41,0x42,0x43,0x44],然后计 算出数据体的长度为11个字节,假设数据头为二个字节的固定值[0xFF,0xEE],则对数 据头、数据长度、数据体进行组装,形成发送数据报文[0xFF,0xEE,0x0B,0x01,0x03, 0x61,0x62,0x63,0x02,0x04,0x41,0x42,0x43,0x44]。[0024]所述服务器端为了完整地接收数据,服务器端首先创建接收缓冲区,当缓冲区中接收 到两个字节的数据后,将接收到的数据和[0xFF,0xEE]进行比较,如果不相符,则丢弃数 据;如果相符,则继续接收第三个字节的数据,并根据第三个字节的数据创建第二个缓冲 区,第二个缓冲区的大小由第三字节的数据确定,当第二个缓冲区已满,表示数据体数据 已接收完整,此时数据体的数据为[0x01,0x03,0x61,0x62,0x63,0x02,0x04,0x41, 0x42,0x43,0x44]。

[0025]所述从数据体T的数据中解析出数据单元,根据字段编码、字段长度、字段内容的顺 序分别解析出数据单元1的数据[0x01,0x03,0x61,0x62,0x63]和数据单元2的数据[0x02, 0x04,0x41,0x42,0x43,0x44]。[0026]所述对数据单元1的数据[0x01,0x03,0x61,0x62,0x63]进行解析,根据字段编码 0x01查找哈希表H{},获得对应的字段名称“user”,然 后提供UTF8对[0x61,0x62,0x63]进行解码,获得字段值“abc”,对数据单元2的数据[0x02, 0x04,0x41,0x42,0x43,0x44]做同样的操作,根据数据单元1和数据单元2解析后的 数据创建KeyValue对象,该对象的值为{}。[0027]遍历KeyValue中的数据,发布提取出Hash表的key值和value值,并将这些值拼接 出文本数据“user=abc,password=ABCD”。[0028]本发明的优点及显著效果:本发明通过自定义报文格式的方式在客户端和服务器端传 输文本数据,既避免了XML格式数据解析的低效率,也避免了JSON格式数据序列化和反 序列化占用较大系统资源的问题,具有传输效率高、实现方式简单、扩展性强等优点;本 方法由于采用二进制方式传输数据,传输效率高,另外对文本数据的解析通过建立字段名 称和字段编码的方式实现,避免了对JSON语法规则的解析,提高了解析的效率,是一种 简单高效的文本数据传输方法。

6

CN 1098130 A

说 明 书

4/5页

附图说明

[0029]图1是本发明适用的组网环境;[0030]图2是本发明方法的报文格式。

具体实施方式

[0031]参看图1,本发明客户端与服务器端之间,采用TCP协议传输数据,客户端使用某种 数据格式对数据进行编码,然后向服务器发送编码数据,服务器接收到数据后再对数据进 行解码。

[0032]参看图2,本发明通过自定义报文格式,在客户端和服务器端传输文本数据,将文本数 据转换为数据单元的格式后再传输,报文包括数据头、数据体长度和数据体3部分。数据 头为定位标志、数据体长度记录了数据体占用空间的字节数,数据体由若干数据单元构成, 每个数据单元包括字段编码、字段长度和字段内容3类信息。报文中的所有数据都为二进 制格式,其中数据头、数据体长度以及数据单元里的“字段编码”均为固定长度的二进制 数,文本数据的转换和解析通过建立字段名称和字段编码的对应哈希关系方式实现,其中 字段名称为字段编码所表示数据的哈希名称。[0033]数据传输过程如下:[0034]步骤一、客户端将文本数据读取到内存中,并将其转换为KeyValue对象,一个 KeyValue对象表示一条文本数据。一个KeyValue对象由多个条目构成,每个条目都是一 个键值对<字段名称,字段内容>,键值对的字段名称和字段内容都为文本类型。[0035]步骤二、客户端对KeyValue对象中的每个条目进行编码,编码的目的是将文本类型 的条目转换为二进制数据:首先将字段名称转换为二进制的编码(记为A),然后将字段 内容转换为byte类型的数组(记为B),最后计算数组B的长度(记为C)。重复以上操 作,对步骤一所述的所有的条目都做相应的处理。[0036]步骤三、客户端将编码A、数组B和长度C组装成数据单元,其中编码A对应数据单 元的“字段编码”,长度C对应数据单元的“字段长度”,数组B对应数据单元的“字段 内容”。重复以上操作形成数据体(记为T),然后计算数据体的的长度(记为L),最后 将数据头、数据长度L和数据体T组装成一个二进制数组。[0037]步骤四、客户端向服务器端发起TCP连接,然后将二进制数组发送到服务器端。[0038]步骤五、服务器端收到二进制数组后,对该数组进行解析,分别解析出数据头、数据 长度和数据体。[0039]步骤六、对数据体进行解析,解析出字段编码、字段长度、字段内容。[0040]步骤七、将字段编码转换为字段名称,然后将字段名称和字段内容生成KeyValue对 象,最后将KeyValue对象转换为文本数据。[0041]以上所述即为文本数据的传输过程。由于采用二进制方式传输数据,传输效率高,另 外对文本数据的解析通过建立字段名称和字段编码的方式实现,避免了对JSON语法规则 的解析,提高了解析的效率,是一种简单高效的文本数据传输方法。[0042]上述七个步骤进一步说明如下:[0043]1、建立字段名称和字段编码的对应关系。假设文本数据为“user=abc,password= ABCD”,本步骤通过哈希表建立字段名称和字段编码的对应关系,创建该文本数据对应

7

CN 1098130 A

说 明 书

5/5页

的 哈希表H{}。该步骤在客户端和服务器端均需要执行。[0044]2、客户端将文本数据读取到内存中,并将其转换为KeyValue对象,一个KeyValue 对象表示一条文本数据。KeyValue对象也是一个哈希表,该哈希表的内容是{, }。[0045]3、客户端对KeyValue对象中的每个条目进行编码,编码的目的是将文本类型的条目 转换为二进制数据。首先取出条目,查找哈希表H获得字段名称“user”对应的 字段编码0x01,然后将字符串“abc”通过UTF8编码的规则转换为二进制数组[0x61,0x62, 0x63],接着计算出字符串“abc”的长度值3。重复本步骤完成对条目 的处理,其中字段名称“password”对应的字段编码为0x02,字符串“ABCD”转换为二进制 数组[0x41,0x42,0x43,0x44]。[0046]4、客户端将每个条目编码后的二进制数据组装成数据单元。首先创建数据单元的的 内存,然后将条目对应的二进制编码数据拷贝到数据单元的内存的起始位置, 然后顺序拷贝条目对应的二进制编码数据到内存中。完成以上操作后, 数据单元的数据分别为[0x01,0x03,0x61,0x62,0x63]和[0x02,0x04,0x41,0x42,0x43, 0x44]。[0047]5、客户端组建发送数据报文。首先将步骤三创建的两个数据单元数据合并为数据体, 数据体的数据为[0x01,0x03,0x61,0x62,0x63,0x02,0x04,0x41,0x42,0x43,0x44], 然后计算出数据体的长度为11个字节,假设数据头为二个字节的固定值[0xFF,0xEE], 则对数据头、数据长度、数据体进行组装,形成发送数据报文[0xFF,0xEE,0x0B,0x01, 0x03,0x61,0x62,0x63,0x02,0x04,0x41,0x42,0x43,0x44]。[0048]6、客户端向服务器端发起TCP连接,然后将二进制数组发送到服务器端。[0049]7、服务器端接收数据。为了完整地接收数据,服务器端首先创建接收缓冲区。当缓 冲区中接收到两个字节的数据后,将接收到的数据和[0xFF,0xEE]进行比较,如果不相符, 则丢弃数据;如果相符,则继续接收第三个字节的数据,并根据第三个字节的数据创建第 二个缓冲区,第二个缓冲区的大小由第三字节的数据确定。当第二个缓冲区已满,表示数 据体数据已接收完整,此时数据体的数据为[0x01,0x03,0x61,0x62,0x63,0x02,0x04, 0x41,0x42,0x43,0x44]。[0050]8、从数据体的数据中解析出数据单元。根据[字段编码,字段长度,字段内容]的顺序 分别解析出数据单元1的数据[0x01,0x03,0x61,0x62,0x63]和数据单元2的数据[0x02, 0x04,0x41,0x42,0x43,0x44][0051]9、对数据单元进行解析创建KeyValue对象。对数据单元1的数据[0x01,0x03,0x61, 0x62,0x63]进行解析,根据字段编码0x01查找哈希表H{}, 获得对应的字段名称“user”,然后提供UTF8对[0x61,0x62,0x63]进行解码,获得字段值 “abc”。对数据单元2的数据[0x02,0x04,0x41,0x42,0x43,0x44]做同样的操作,根据 数据单元1和数据单元2解析后的数据创KeyValue对象,该对象的值为{, }[0052]10、遍历KeyValue中的数据,发布提取出Hash表的key值和value值,并将这些值 拼接出文本数据“user=abc,password=ABCD”。

8

CN 1098130 A

说 明 书 附 图

1/1页

图1

图2

9

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 517ttc.cn 版权所有 赣ICP备2024042791号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务