CN105450359A - 自定义二进制结构化协议数据的发送和接收方法 - Google Patents
自定义二进制结构化协议数据的发送和接收方法 Download PDFInfo
- Publication number
- CN105450359A CN105450359A CN201510660055.XA CN201510660055A CN105450359A CN 105450359 A CN105450359 A CN 105450359A CN 201510660055 A CN201510660055 A CN 201510660055A CN 105450359 A CN105450359 A CN 105450359A
- Authority
- CN
- China
- Prior art keywords
- data
- segment
- type
- formatted
- packet
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L1/00—Arrangements for detecting or preventing errors in the information received
- H04L1/0001—Systems modifying transmission characteristics according to link quality, e.g. power backoff
- H04L1/0006—Systems modifying transmission characteristics according to link quality, e.g. power backoff by adapting the transmission format
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L1/00—Arrangements for detecting or preventing errors in the information received
- H04L1/0001—Systems modifying transmission characteristics according to link quality, e.g. power backoff
- H04L1/0015—Systems modifying transmission characteristics according to link quality, e.g. power backoff characterised by the adaptation strategy
- H04L1/0016—Systems modifying transmission characteristics according to link quality, e.g. power backoff characterised by the adaptation strategy involving special memory structures, e.g. look-up tables
Abstract
本发明涉及一种自定义二进制结构化协议数据的发送方法,包括如下步骤:在第一存储区域中按数据的存储顺序,依次取得该存储区域中的各数据段,将各数据段中的数据分别转换为包括数据描述单元和数据内容单元的第一格式数据,并将得到的具有第一格式数据分别按其顺序存储在第二存储区域;依次读取所述第二存储区域中的数据并形成数据包发送;其中,所述数据描述单元用于指示该数据段数据的类型或结构类型,所述数据内容是该数据段中数据的实际值或字符串。本发明还涉及一种接收上述发送数据的方法。实施本发明的自定义二进制结构化协议数据的发送和接收方法,具有以下有益效果:其节约网络带宽、较为安全。
Description
技术领域
本发明涉及数据传输领域,更具体地说,涉及一种自定义二进制结构化协议数据的发送和接收方法。
背景技术
随着计算机网络的发展,基于计算机网络的应用层出不穷,应用数据采取何种协议存在于网络上是所有网络应用都需要考虑的问题。自定义结构体二进制协议便是其中经典的一种,它尤其是在客户/服务器模型的网络应用中得到广泛应用。在现有技术中,通常是直接将结构体所占内存空间的内容作为数据源向网络发送,接收方直接以相同结构体强制还原所收到数据。这样的数据传输方法使用起来很方便。但这种直接以结构体原始内容作为传输内容的通信方式,存在网络带宽浪费严重的问题,如果要通过结构体传输字符串信息,则结构体的字符数组需要按最大字符串要求来定义这个字符串数组,而不能根据实际需要动态决定字符串信息以多大空间来传输。而事实上很多情况下,实际的字符串数据,则往往小于或大大小于这个定段定义时的空间大小。这导致存储空间的严重浪费,这样的数据在网络上传输,也严重浪费了网络带宽。此外,这样的数据传输的安全性不高,因为结构体协议,每种协议大小是固定的,黑客很容易对这种协议数据包进行分析,进而进行攻击。
发明内容
本发明要解决的技术问题在于,针对现有技术的上述浪费严重、不安全的缺陷,提供一种节约网络带宽、较为安全的自定义二进制结构化协议数据的发送和接收方法。
本发明解决其技术问题所采用的技术方案是:构造一种自定义二进制结构化协议数据的发送方法,包括如下步骤:
A)确认本次需要传输的原始数据所在的第一存储区域;
B)在所述第一存储区域中按数据的存储顺序,依次取得该存储区域中的各数据段,将各数据段中的数据分别转换为包括数据描述单元和数据内容单元的第一格式数据,并将得到的第一格式数据分别按其得到顺序存储在第二存储区域;
C)依次读取多个所述第二存储区域中的第一格式数据,生成数据包并发送;所述数据包包括包头和包数据,其包头中设置有表示本数据包中第一格式数据类型及顺序的第一识别码;
其中,所述数据描述单元用于指示该数据段数据的类型或结构类型,所述数据内容是该数据段中原始数据的实际值转换而得的数据或者是该数据段中原始数据的实际值或字符串。
更进一步地,所述步骤C)中进一步包括:
C1)取得多个第一格式数据,使所述多个第一格式数据的长度总和是设定的长度;
C2)按照所述多个第一格式数据的顺序及其数据类型,生成第一识别码,将所述第一识别码放入所述数据包的包头中;
C3)按照读取顺序排列所述多个第一格式数据,得到所述数据包的数据内容。
更进一步地,所述步骤B)中通过判断当前数据段的数据类型,依据判断结果,分别得到该数据段的数据描述单元和数据内容单元,从而得到该数据段的第一格式数据;
其中,所述数据描述单元通过读取该数据段的原始数据的指定部分得到;根据该数据段的数据类型的不同,所述数据描述单元包括数据类型描述部分或者所述数据描述单元包括数据类型描述部分和数据长度描述部分。
更进一步地,所述步骤B)中,当所述数据段中为基本数据类型时,取得该基本数据中的有效数字的绝对值,将其与依次与多个设定值比较,得到其第一格式数据中的数据描述单元、数据内容单元的数据以及该数据的长度;
当所述数据段为数组、结构体或容器时,其数据描述单元通过读取当前数据段中的设定内容取得,其转换后的数据内容为该数据段中原始数据的数据内容,其数据长度为第一存储区域中该原始数据的数据长度。
更进一步地,所述步骤B)中进一步包括:
B1)读取所述第一存储区域中的一个数据段;
B2)判断所述数据段是否为基本数据类型,如是,执行基本数据转换,依次排列得到的数据描述单元和数据内容单元,得到该数据段的第一格式数据;如否,执行步骤B3);
B3)判断所述数据段是否为数组或结构体对象,如是,执行数组或结构体对象转换,依次排列得到的数据描述单元和数据内容单元,得到该数据段的第一格式数据;如否,执行步骤B4);
B4)判断所述数据段是否为容器类型数据,如是,执行容器对象转换,依次排列得到的数据描述单元和数据内容单元,得到该数据段的第一格式数据;如否,则判断当前数据段为字符串,依次排列取得的数据描述单元和原始数据中的字符串部分,得到该数据段的第一格式数据。
更进一步地,所述步骤B2)中,执行基本数据转换包括:
B21)读取数据段中设定位置,得到该数据段中数据的类型,并判断数据段中的原始数据是否为零,如是,对数据描述单元中的数据类型做出第一类标记,并去掉该数据段的数据内容单元,得到该数据段的第一格式数据;如否,执行下一步骤;
B22)判断所述原始数据取反并加1是否仍等于该原始数据本身,如是,对数据描述单元中的数据类型做出第二类标记,并去掉该数据段的数据内容单元,得到该数据段的第一格式数据;否则,执行下一步骤;
B23)取得所述数据段原始数据的绝对值,将其逐个与设定的值比较,得到该数据段的数据内容单元的长度,将上述步骤中得到的数据类型和所述原始数据的有效值分别放入所述数据描述单元和数据内容单元,得到该数据段的第一格式数据。
更进一步地,所述步骤B3)中,数据段中的数据是数组或结构体类型,其数据描述单元包括一个字节的、由读取该数据段中指定位置而得到的数据类型描述部分和长度变化的数据长度描述部分;所述数据长度描述部分通过对该数据段中组成该数组或结构体的所有数据长度求和而得;其数据内容单元中的数据是该数据段中所有数组或结构体的原始数据;
所述步骤B4)中,数据段中的数据是容器类型数据,其数据描述单元包括一个字节的数据类型描述部分、一个字节的容器对象类型描述部分和长度变化的数据长度描述部分;所述容器对象类型描述部分通过读取该数据段中原始数据的指定位置而得;所述数据长度描述部分通过对该数据段中组成该容器的所有数据长度求和而得;其数据内容单元中的数据是该数据段中该容器内数据的原始数据。
本发明还涉及一种接收使用上述方法发送数据的数据接收方法,包括如下步骤:包括如下步骤:
M)接收传来的数据包,取得其包头中表示本数据包中第一格式数据的排列顺序及数据类型的第一识别码,得到本数据包中第一格式数据的数据类型及其排列顺序;
N)依次取得该数据包中的第一格式数据,按照数据描述单元的内容将其数值内容单元转换为原始数据;
O)逐个存储由该数据包中得到的原始数据。
更进一步地,所述步骤M)中进一步包括:取得该数据包中的第一识别码,查表得到该识别码对应的第一格式数据的数据类型及排列顺序,如该第一识别码不在事先设定的表中,判断该数据包不可用,抛弃该数据包。
更进一步地,所述步骤N)中,取得一个第一格式数据的数据类型单元后,判断其数据类型,按照对应的数据类型处理该第一格式数据中的数据内容部分,将其转换为原始数据;
其中,所述数据类型包括基本数据类型、数组或结构体对象、容器类型数据或字符串。
实施本发明的自定义二进制结构化协议数据的发送和接收方法,具有以下有益效果:由于在传输之前对自定义二进制结构化协议数据按照其存储在第一存储区域的顺序,以数据段为单位,进行了按照其数据类型对其进行了转换,使得基本数据或由基本数据组成的其他数据类型得到了具有数据类型描述单元和数据内容单元的第一格式数据,并将其存储在第二存储区域以待传输,这样使得在基本数据类型中大量存在的空的存储空间被消除,这些空的存储区域不会占用传输的带宽;同时,数据的随机性使得传输的数据不再具有可以预测的格式;同时,在传输是使用数据包的形式,使得传输的数据在接收方能够第一时间被识别,并按照与数据发送是采取的转换方法的逆过程被转换为原始数据。所以,其节约网络带宽、较为安全。
附图说明
图1是本发明自定义二进制结构化协议数据的发送和接收方法实施例中的数据发送方法流程图;
图2是所述实施例中基本数据类型的转换流程图;
图3是所述实施例中第一识别码的产生流程图;
图4是所述实施例中数据接收方法的流程图。
具体实施方式
下面将结合附图对本发明实施例作进一步说明。
如图1所示,在本发明的一种二进制结构化协议数据在网络上的传输方法及装置实施例中,该方法包括如下步骤:
步骤S11确认传输数据所在的第一存储区域:在本实施例中,对于现有技术中的基于二进制结构化协议而得到的数据进行传输,一般来讲,这样的传输在其进行期间,通常是不间断地将选择的数据(通过网络)发送到另外一个终端上,这些需要发送的数据存储的区域就是第一存储区域,该第一存储区域也可以是缓存的区域,此时,这些数据已经被都入缓存,准备发送。在现有技术中,是直接将上述缓存或存储区域中的数据发送出去的。在本实施例中,则需要将这些数据按照其在缓存或第一存储区域中的排列顺序,将其转换(或者经过编码),才能发送出去。所以,在本步骤中,确认需要传输的数据存储的位置,即第一存储区域的位置。
步骤S12按照该区域的存储顺序取得一个数据段:在本步骤中,由于已经确定需要传输的数据存储的位置,因此可以确定需要转换或编码的数据的起始位置和结束位置。按照数据的存储顺序,依次由上述存储区域的范围内读取数据,每次读取的是遵循二进制结构化协议的一个数据段,该数据段按照二进制结构化协议的规定,在指定的位置上设置有表示本数据段数据类型的信息,以及本数据段中携带的数据内容(即数据本身)。
步骤S13对取得的数据段进行读取和转换,得到该数据段的第一格式数据:在本步骤中,读取上述数据段中的指定位置,得到表示该数据段中数据类型的信息,按照该信息,得到数据类型描述单元,该数据类型描述单元在本实施例中的长度为1个字节,其中的数据表示了该数据段中数据的类型。在本实施例中,这些数据类型通常包括基本数据类型、char数组,string,vector容器,map容器,结构体对象等;而基本数据类型又包括bool、char、short、int、long、float和double数据。每个具体的数据类型在上述数据类型描述单元中均通过一个或多个设定的数字来表示。在本实施例中,一个第一格式数据除了上述数据类型描述单元外,至少还包括一个数据内容单元,该数据内容单元可以包括多个字节的数据,也可以是0个字节(即没有数据内容单元),其中的数据内容可以是原始数据中的数据内容,也可以是原始数据中的数据内容通过转换而得到的数据。也就是说,上述数据描述单元用于指示该数据段数据的类型或结构类型,数据内容单元中是经过转换或未经过转换的数据内容,而数据内容是该数据段中数据的实际值或字符串。将一个数据段通过上述步骤得到的数据类型描述单元和数量内容单元依次排列在一起,就得到该数据段的第一格式数据。至于如何按照不同的数据类型得到第一格式数据(主要是其中的数据内容单元),稍后详述。
步骤S14将得到的第一格式数据按照顺序存储在第二存储区域:在本步骤中,将得到的第一个是数据按照取得数据段的顺序,存储的第二存储区域。
步骤S15由第二存储区域取得多个第一格式数据,形成数据包并发送该数据包:在本步骤中,由第二存储区域中(通常是按照其存储顺序,也就是存储器地址的顺序)读取多个已经存储在其中的第一格式数据,使得一次读取的第一格式数据具有设定数量的长度。通常来讲,这样的要求可能并不能在每次读取时得到满足,这是由于在本实施例中,即使是在相同数据类型的情况下,每个第一格式数据的长度可能是不一样的,因此,在本实施例中,上述设定数量是可以变化的,其取指的标准是得到整数个第一数据,且使其数据长度不超出数据包的许可范围,其将在数据包的包头中携带本数据包中的第一格式数据的总长度。正如通常的数据包的结构一样,在本实施例中,一个数据包也包括包头及其紧随其后的包数据;不同之处在于包头中携带了第一识别码,通过该第一识别码,在接收该数据包时,能够通过查表等手段得知本数据包携带的第一格式数据的数量,分别是什么数据类型以及这些第一格式数据之间的排列顺序等等,以便接收方处理该数据包。如果接收方取得一个数据包中的第一识别码,但是通过查表等手段没有找到该识别码,通常会认为该数据包不可有,将抛弃该数据包。至于在本步骤中如何得到上述的第一识别码,稍后详述。
在本实施例中,上述过程较为具体地示出了由第二存储区域中生成一个数据包。当然,在实际使用时,不会只生成并发送一个数据包。通常是不断地在第二存储区域依次读取其多个第一格式数据,分别生成不同的数据包并依次发送,以实现数据的发送。
值得一提的是,对于数据传输而言,通常包括了数据的发送和数据的接收。通常,如果在数据发送前,对原始数据进行了按照某种规律的转换,在数据接收时,通常会按照这样的转换规律进行逆变换,使得接收到的数据转换为在发送端未经过转换之前的格式。在本实施例中也不例外,接收端接收到上述发送的数据后,按照接收的顺序,将接受到的每个第一格式数据转换,得到和原先第一存储区域中的格式一样的数据(即自定义二进制结构协议数据)。
在本实施例中,是通过判断当前数据段的数据类型,依据判断结果,分别得到该数据段的第一格式数据;也就是说,第一格式数据中数据描述单元根据该数据段的数据类型的不同,具有不同的组成部分和长度。具体来讲,如果当前数据段中是基本数据类型,其第一格式数据就是一个字节的数据类型单元加上0-8字节的数据内容单元;如果当前数据段中是数组或结构体对象,其第一格式数据就是一个字节的数据类型部分加上长度可变化的数据长度描述部分再加上数据内容单元,其中,数据内容单元的长度等于数据长度描述部分中记载的长度,数据类型部分和数据长度部分组成数据描述单元;如果当前数据段中是容器类数据时,其数据描述单元包括一个字节的数据类型描述部分、一个字节的容器对象类型描述部分和长度变化的数据长度描述部分;其中,容器对象类型描述部分通过读取该数据段中原始数据的指定位置而得;数据长度描述部分通过对该数据段中组成该容器的所有基本数据长度求和而得;同样地,在容器类数据的第一格式数据中,数据描述单元的后面紧跟的是数据内容单元。
在本实施例中,在将数据段转换为第一格式数据时,当所述数据段为基本数据类型时,取得该基本数据中的有效数字的绝对值,将其与依次与多个设定值比较,得到其第一格式数据中的数据内容单元的数据以及该数据的长度;当所述数据段为数组、结构体或容器时,分别依次取得构成所述数组、结构体或容器的元素的数据中的有效数字的绝对值,将其与依次与多个设定值比较,分别得到该元素的转换后的数据内容及长度,将得到的多个元素转换后的数据内容依次排列,得到该数组、结构体或容器的数据内容单元。
图2示出了一个数据段中的数据是基本数据类型时,其数据长度的判断过程:首先的步骤是读取所述第一存储区域中的一个数据段;当取得一个数据段后,判断该数据段是否为基本数据类型,如是,执行基本数据转换,依次排列得到的数据描述单元和数据内容单元,得到该数据段的第一格式数据。具体来讲,判断该数据段是否为基本数据类型,如步骤S201中所示,读取该数据段中的指定位置,得到其中数据的数据类型并判断是否为基本数据类型。如是,执行步骤S202,判断该数据段中数据的有效值为零否,如是,执行步骤S212,得到其数据长度为零,对数据描述单元中的数据类型做出第一类标记,并去掉该数据段的数据内容单元,得到该数据段的第一格式数据;也就是上述数据描述部分已经能够表示其数据值;如否,执行步骤S203,判断该数据的有效值取反加1是否仍为其本身,如是,执行步骤S213,得到其数据长度为零,对数据描述单元中的数据类型做出第二类标记,并去掉该数据段的数据内容单元,得到该数据段的第一格式数据;如否,执行步骤S204,取得上述有效值的绝对值,将其与设定的数0x7f比较,判断其是否小于0x7f,如是,执行步骤S214得到其第一格式数据中的数据长度为1字节;如否,则执行步骤S205,将该绝对值与设定的数0x7ff比较,判断其是否小于0x7ff,如是,则执行步骤S215,得到其第一格式数据中的数据长度为2字节,如否,执行步骤S206等等,以此类推,步骤S207、步骤S208、步骤S209和步骤S210中,都是将上述绝对值与设定的数值比较,不同的是这些数值逐步加大,直到步骤S210中0x7fffffff,每一步骤中,如果该绝对值小于比较的数字,则分别执行步骤S216、步骤S217、步骤S218、步骤S219或步骤S220,分别得到该数据段中的数据长度为3、4、5、6或7个字节,如果步骤S210中,该绝对值不小与上述0x7fffffff,则执行步骤S211,得到其数据长度为8个字节。
在本实施例中,上面的描述给出了在数据段为基本数据时,其长度的取得方式,数据长度决定后,取得原始数据中的有效数据即得到转换后的第一格式数据中的数据内容,该有效数据就是原始数据中能够产生作用的数据,例如,一个二进制数前面的零就不能产生作用,因此可以去掉。
如果在上述步骤中判断该数据段中不是基本数据,则判断该数据段是否为数组或结构体对象,如是,执行数组或结构体对象转换,依次排列得到的数据描述单元和数据内容单元,得到该数据段的第一格式数据;如否,进一步判断所述数据段是否为容器类型数据,如是,执行数组或结构体对象转换,依次排列得到的数据描述单元和数据内容单元,得到该数据段的第一格式数据;如否,则判断当前数据段为字符串,依次排列取得的数据描述单元和原始数据中的字符串部分,得到该数据段的第一格式数据。
上述涉及数据类型的判断都是通过读取二进制结构数据中的指定位置的数值,再与表示各种类型的数值比较而得到当前数据段中的数据类型的。总体上来讲,当一个数据段中的数据是基本数据类型时,所述数据内容单元的长度通过对原始数据中的有效数据计算而得,所述数据内容单元中的数据是所述原始数据中的有效数据;当一个数据段中的数据是数组或结构体类型时,其数据描述单元包括一个字节的数据类型描述部分和长度变化的数据长度描述部分;所述数据长度描述部分通过对该数据段中组成该数组或结构体的所有基本数据长度求和而得;当一个数据段中的数据是容器类数据时,其数据描述单元包括一个字节的数据类型描述部分、一个字节的容器对象类型描述部分和长度变化的数据长度描述部分;所述容器对象类型描述部分通过读取该数据段中原始数据的指定位置而得;所述数据长度描述部分通过对该数据段中组成该容器的所有基本数据长度求和而得。
如图3所示,在本实施例中,形成一个数据包的第一识别码的具体步骤包括:
步骤S31按照顺序取得多个第一格式数据的数据类型描述单元:在本步骤中,分别通过读取选择的多个第一格式数据的数据描述单元,得到每个第一格式数据的数据类型。通常来讲是按照第一格式数据的顺序来读取其数据描述单元的,所以得到的数据类型也是具有顺序的。这个顺序实际上表示了这些第一格式数据在缓存中的排列顺序,其数量就是缓存中(本次读取或本数据包中)的第一格式数据的数量。
步骤S32按照顺序逐个查找数据类型:在本实施例中,第一格式数据的数据类型可以有多种,例如,基本数据或数组等等;同样地,在形成数据包时,其包括的第一格式数据的个数也可以有多个,事先设定在每种情况下,均只有一个唯一的数对应,在本步骤中就是在事先设置的内容中找到对应的数,该数就是第一识别码。一种最简单的情况下,例如,第一格式的数据类型包括基本数据和数组,此时,数据包中包括一个基本数据用1表示,包括一个数组用2表示,包括一个基本数据后面跟随一个数组用3表示,包括一个数组后面跟随一个基本数据用4表示,包括两个基本数据用5表示,包括两个数组用6表示等等。总之,是在事先设定的内容中查找,不仅与数据类型相关,也会其顺序、数量相关。该事先设定的内容可能是一个表格,也可能是一个类似树状的检索装置等等。
步骤S33得到该数据包的第一识别码:在本步骤中,得到该数据包的第一识别码,将其放入数据包的包头中。
在本实施例中,还涉及一种接收使用上述方法发送数据的方法。图4示出了这种接收方法的具体步骤:
步骤S41接收数据包,取得其包头中的第一识别码:在本步骤中,接收传来的数据包,取得其包头中表示本数据包中第一格式数据的排列顺序及数据类型的第一识别码。在本实施例中,通过读出数据包头中指定位置的内容,就能够得到上述第一识别码。
步骤S42查找该第一识别码:在本步骤中,在事先设定的内容(通常是一个对照表)中查找上述得到的第一识别码。
步骤S43查到该第一识别码否,如是,执行下一步骤;否则,跳转到步骤S46;
步骤S44得到该第一识别码表示的多个第一格式数据包的数据类型和顺序:在本实施例中,如果能够在事先设定的内容中查找到上述第一识别码,则能够得到该第一识别码表示的具体内容,也就是该数据包中包括多少个第一格式数据,这些第一格式数据的数据类型分别是什么,这些相同或不同数据类型的第一格式数据的顺序如何。因此,在本步骤中,就是依据上述第一识别码得到上述这些内容。
步骤S45逐个处理该数据包中的第一格式数据:在本步骤中,逐个取出上述数据包中包括的第一格式数据,按照其数据类型分别对其进行处理,使得其数据转换为原始数据,同时,按照得到的顺序存储在这些得到的原始数据,以便接收数据者能够使用这些数据。具体来讲,就是取得一个第一格式数据的数据类型单元后,依据其数据类型,按照对应的数据类型处理该第一格式数据中的数据内容部分,将其转换为原始数据。此处,采用上述将各种不同数据类型的数据转换为第一格式数据的过程的逆过程,来使得该第一格式数据转换为与其数据类型对应的原始数据的。在本步骤中,对于多个第一格式数据的处理是按照其在数据包中排列的顺序依次进行的。同样地,在接收过程中,上述数据类型包括基本数据类型、数组或结构体对象、容器类型数据或字符串。
步骤S46抛弃该数据包:在本步骤中,由于不能识别数据包中的第一识别码,所以认为该数据包中的数据不能处理,抛弃该数据包。
值得一提的是,上述步骤给出了一个数据包的接收示例。对于数据传输而言,当然不会是仅仅传输一个数据包。一般来讲,其传输的是多个连贯的数据包,在处理时,不断重复上述接收过程即可实行多个连续数据包的处理,从而实现数据的传输。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种自定义二进制结构化协议数据的发送方法,其特征在于,包括如下步骤:
A)确认本次需要传输的原始数据所在的第一存储区域;
B)在所述第一存储区域中按数据的存储顺序,依次取得该存储区域中的各数据段,将各数据段中的数据分别转换为包括数据描述单元和数据内容单元的第一格式数据,并将得到的第一格式数据分别按其得到顺序存储在第二存储区域;
C)依次读取多个所述第二存储区域中的第一格式数据,生成数据包并发送;所述数据包包括包头和包数据,其包头中设置有表示本数据包中第一格式数据类型及顺序的第一识别码;
其中,所述数据描述单元用于指示该数据段数据的类型或结构类型,所述数据内容是该数据段中原始数据的实际值转换而得的数据或者是该数据段中原始数据的实际值或字符串。
2.根据权利要求1所述的自定义二进制结构化协议数据的发送方法,其特征在于,所述步骤C)中进一步包括:
C1)取得多个第一格式数据,使所述多个第一格式数据的长度总和是设定的长度;
C2)按照所述多个第一格式数据的顺序及其数据类型,生成第一识别码,将所述第一识别码放入所述数据包的包头中;
C3)按照读取顺序排列所述多个第一格式数据,得到所述数据包的数据内容。
3.根据权利要求2所述的自定义二进制结构化协议数据的发送方法,其特征在于,所述步骤B)中通过判断当前数据段的数据类型,依据判断结果,分别得到该数据段的数据描述单元和数据内容单元,从而得到该数据段的第一格式数据;
其中,所述数据描述单元通过读取该数据段的原始数据的指定部分得到;根据该数据段的数据类型的不同,所述数据描述单元包括数据类型描述部分或者所述数据描述单元包括数据类型描述部分和数据长度描述部分。
4.根据权利要求3所述的自定义二进制结构化协议数据的发送方法,其特征在于,所述步骤B)中,当所述数据段中为基本数据类型时,取得该基本数据中的有效数字的绝对值,将其与依次与多个设定值比较,得到其第一格式数据中的数据描述单元、数据内容单元的数据以及该数据的长度;
当所述数据段为数组、结构体或容器时,其数据描述单元通过读取当前数据段中的设定内容取得,其转换后的数据内容为该数据段中原始数据的数据内容,其数据长度为第一存储区域中该原始数据的数据长度。
5.根据权利要求4所述的自定义二进制结构化协议数据的发送方法,其特征在于,所述步骤B)中进一步包括:
B1)读取所述第一存储区域中的一个数据段;
B2)判断所述数据段是否为基本数据类型,如是,执行基本数据转换,依次排列得到的数据描述单元和数据内容单元,得到该数据段的第一格式数据;如否,执行步骤B3);
B3)判断所述数据段是否为数组或结构体对象,如是,执行数组或结构体对象转换,依次排列得到的数据描述单元和数据内容单元,得到该数据段的第一格式数据;如否,执行步骤B4);
B4)判断所述数据段是否为容器类型数据,如是,执行容器对象转换,依次排列得到的数据描述单元和数据内容单元,得到该数据段的第一格式数据;如否,则判断当前数据段为字符串,依次排列取得的数据描述单元和原始数据中的字符串部分,得到该数据段的第一格式数据。
6.根据权利要求5所述的自定义二进制结构化协议数据的发送方法,其特征在于,所述步骤B2)中,执行基本数据转换包括:
B21)读取数据段中设定位置,得到该数据段中数据的类型,并判断数据段中的原始数据是否为零,如是,对数据描述单元中的数据类型做出第一类标记,并去掉该数据段的数据内容单元,得到该数据段的第一格式数据;如否,执行下一步骤;
B22)判断所述原始数据取反并加1是否仍等于该原始数据本身,如是,对数据描述单元中的数据类型做出第二类标记,并去掉该数据段的数据内容单元,得到该数据段的第一格式数据;否则,执行下一步骤;
B23)取得所述数据段原始数据的绝对值,将其逐个与设定的值比较,得到该数据段的数据内容单元的长度,将上述步骤中得到的数据类型和所述原始数据的有效值分别放入所述数据描述单元和数据内容单元,得到该数据段的第一格式数据。
7.根据权利要求6所述的自定义二进制结构化协议数据的发送方法,其特征在于,所述步骤B3)中,数据段中的数据是数组或结构体类型,其数据描述单元包括一个字节的、由读取该数据段中指定位置而得到的数据类型描述部分和长度变化的数据长度描述部分;所述数据长度描述部分通过对该数据段中组成该数组或结构体的所有数据长度求和而得;其数据内容单元中的数据是该数据段中所有数组或结构体的原始数据;
所述步骤B4)中,数据段中的数据是容器类型数据,其数据描述单元包括一个字节的数据类型描述部分、一个字节的容器对象类型描述部分和长度变化的数据长度描述部分;所述容器对象类型描述部分通过读取该数据段中原始数据的指定位置而得;所述数据长度描述部分通过对该数据段中组成该容器的所有数据长度求和而得;其数据内容单元中的数据是该数据段中该容器内数据的原始数据。
8.一种自定义二进制结构化协议数据的接收方法,其特征在于,包括如下步骤:
M)接收传来的数据包,取得其包头中表示本数据包中第一格式数据的排列顺序及数据类型的第一识别码,得到本数据包中第一格式数据的数据类型及其排列顺序;
N)依次取得该数据包中的第一格式数据,按照数据描述单元的内容将其数值内容单元转换为原始数据;
O)逐个存储由该数据包中得到的原始数据。
9.根据权利要求8所述的自定义二进制结构化协议数据的接收方法,其特征在于,所述步骤M)中进一步包括:取得该数据包中的第一识别码,查表得到该识别码对应的第一格式数据的数据类型及排列顺序,如该第一识别码不在事先设定的表中,判断该数据包不可用,抛弃该数据包。
10.根据权利要求9所述的自定义二进制结构化协议数据的接收方法,其特征在于,所述步骤N)中,取得一个第一格式数据的数据类型单元后,判断其数据类型,按照对应的数据类型处理该第一格式数据中的数据内容部分,将其转换为原始数据;
其中,所述数据类型包括基本数据类型、数组或结构体对象、容器类型数据或字符串。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510660055.XA CN105450359A (zh) | 2015-10-14 | 2015-10-14 | 自定义二进制结构化协议数据的发送和接收方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510660055.XA CN105450359A (zh) | 2015-10-14 | 2015-10-14 | 自定义二进制结构化协议数据的发送和接收方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105450359A true CN105450359A (zh) | 2016-03-30 |
Family
ID=55560195
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510660055.XA Pending CN105450359A (zh) | 2015-10-14 | 2015-10-14 | 自定义二进制结构化协议数据的发送和接收方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105450359A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106712902A (zh) * | 2016-12-19 | 2017-05-24 | 上海东软载波微电子有限公司 | Modbus协议文件的编码、解码方法及编码器、解码器 |
CN108540313A (zh) * | 2018-03-21 | 2018-09-14 | 烽火通信科技股份有限公司 | 一种基于类型标识符的北向接口采集电路结构的方法 |
CN109005174A (zh) * | 2018-08-03 | 2018-12-14 | 京信通信系统(中国)有限公司 | 数据通信方法、装置、计算机存储介质及设备 |
CN110830164A (zh) * | 2019-10-22 | 2020-02-21 | 武汉理工光科股份有限公司 | 一种用于物联网设备通信的数据序列化方法 |
CN112822090A (zh) * | 2019-11-15 | 2021-05-18 | 北京新媒传信科技有限公司 | 一种适用于移动终端的即时通信工具的通信方法、装置和系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101087245A (zh) * | 2006-06-08 | 2007-12-12 | 大唐移动通信设备有限公司 | 移动通信系统中同时传输多种类型数据的方法 |
CN102916902A (zh) * | 2011-08-03 | 2013-02-06 | 中兴通讯股份有限公司 | 数据存储方法及装置 |
CN104123364A (zh) * | 2014-07-21 | 2014-10-29 | 上海迈循信息科技有限公司 | 一种移动终端发送和接收数据的方法及装置 |
CN104679479A (zh) * | 2015-03-12 | 2015-06-03 | 中国人民解放军信息工程大学 | 一种基于任务编号的调度控制机制的多核密码处理器 |
-
2015
- 2015-10-14 CN CN201510660055.XA patent/CN105450359A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101087245A (zh) * | 2006-06-08 | 2007-12-12 | 大唐移动通信设备有限公司 | 移动通信系统中同时传输多种类型数据的方法 |
CN102916902A (zh) * | 2011-08-03 | 2013-02-06 | 中兴通讯股份有限公司 | 数据存储方法及装置 |
CN104123364A (zh) * | 2014-07-21 | 2014-10-29 | 上海迈循信息科技有限公司 | 一种移动终端发送和接收数据的方法及装置 |
CN104679479A (zh) * | 2015-03-12 | 2015-06-03 | 中国人民解放军信息工程大学 | 一种基于任务编号的调度控制机制的多核密码处理器 |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106712902A (zh) * | 2016-12-19 | 2017-05-24 | 上海东软载波微电子有限公司 | Modbus协议文件的编码、解码方法及编码器、解码器 |
CN106712902B (zh) * | 2016-12-19 | 2019-09-27 | 上海东软载波微电子有限公司 | Modbus协议文件的编码、解码方法及编码器、解码器 |
CN108540313A (zh) * | 2018-03-21 | 2018-09-14 | 烽火通信科技股份有限公司 | 一种基于类型标识符的北向接口采集电路结构的方法 |
CN108540313B (zh) * | 2018-03-21 | 2020-12-29 | 烽火通信科技股份有限公司 | 一种基于类型标识符的北向接口采集电路结构的方法 |
CN109005174A (zh) * | 2018-08-03 | 2018-12-14 | 京信通信系统(中国)有限公司 | 数据通信方法、装置、计算机存储介质及设备 |
CN110830164A (zh) * | 2019-10-22 | 2020-02-21 | 武汉理工光科股份有限公司 | 一种用于物联网设备通信的数据序列化方法 |
CN112822090A (zh) * | 2019-11-15 | 2021-05-18 | 北京新媒传信科技有限公司 | 一种适用于移动终端的即时通信工具的通信方法、装置和系统 |
CN112822090B (zh) * | 2019-11-15 | 2023-03-31 | 北京新媒传信科技有限公司 | 一种适用于移动终端的即时通信工具的通信方法、装置和系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105450359A (zh) | 自定义二进制结构化协议数据的发送和接收方法 | |
CN108696492B (zh) | Ip报文的处理方法与装置 | |
CN100448227C (zh) | 业务流的识别方法 | |
CN102693297B (zh) | 数据处理方法、节点和提取、转换和加载etl系统 | |
CN112449009B (zh) | 一种基于svd的联邦学习推荐系统通信压缩方法及装置 | |
CN105763317A (zh) | 基于BitTorrent协议Have消息的秘密信息传输方法 | |
Abdelfadeel et al. | Lschc: Layered static context header compression for lpwans | |
CN103428184A (zh) | 通讯报文的转换方法及系统 | |
CN101282294B (zh) | 一种基于组的控制消息的传输方法 | |
CN104065460B (zh) | 基于二叉树的编码方法和编码装置 | |
CN111104338A (zh) | 通信协议建模方法 | |
CN102546293B (zh) | 基于哈希比特串复用的高速网络流量网络地址测量方法 | |
CN105337850A (zh) | 一种物联网数据处理方法及物联网网关 | |
CN108337176B (zh) | 一种报文处理方法和装置 | |
CN103973832A (zh) | 一种基于物理空间位置映射的IPv6编址与组网方法 | |
CN104009943A (zh) | Lldp报文传输方法及dcb设备 | |
CN106789440B (zh) | 一种ip包包头检测方法及装置 | |
CN106657436B (zh) | 报文处理方法和装置 | |
CN109474582B (zh) | 一种仿真嵌入式系统数据通信协议的处理方法及装置 | |
CN102123006B (zh) | 一种采用网络编码的网络传输方法 | |
US20190020743A1 (en) | Data transmitting apparatus, data receiving apparatus and method thereof | |
CN104202124A (zh) | 一种erp数据包通讯方法 | |
Hussian et al. | CoXoH: Low cost energy efficient data compression for wireless sensor nodes using data encoding | |
CN112291256B (zh) | Uart网关数据传输方法 | |
CN116471344B (zh) | 一种数据报文的关键字提取方法、装置及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
AD01 | Patent right deemed abandoned |
Effective date of abandoning: 20190809 |
|
AD01 | Patent right deemed abandoned |