一种协议的解析方法和装置与流程

文档序号:15358205发布日期:2018-09-05 00:16阅读:187来源:国知局

本发明涉及物联网技术领域,尤其是涉及一种协议的解析方法和装置。



背景技术:

物联网就是物物相连的互联网。一方面,物联网的核心和基础仍然是互联网,是在互联网基础上的延伸和扩展的网络;另一方面,其用户端延伸和扩展到了任何物品与物品之间,进行信息交换和通信,也就是物物相息。物联网通过智能感知、识别技术与普适计算等通信感知技术,广泛应用于网络的融合中,也因此被称为继计算机、互联网之后世界信息产业发展的第三次浪潮。

物联网物物相连的场景极多,每个物体,每个公司都是会有不同的协议。每个不同内容的协议上报后,都需要重新去设计解析方式,其中,协议的组合方式,解析方式,加密/解密方式和大小端模式等,以及每个单位表示的数据类型,每个协议的长度的等,都是影响和决定分拆包以及协议解析的因素。每个协议的解析规则都不相同,导致了需要重复写代码来适应不同的协议解析,如果接入的协议比较多,需要分n种不同的项目。由于协议多样性和复杂度的不同,一方面导致程序员需要在各个不同的协议中来回切换思维,分析过程,从而导致解析混乱和对项目的管理困难。

针对以上问题,还未提出有效解决方案。



技术实现要素:

有鉴于此,本发明的目的在于提供一种协议的解析方法和装置,以解决由于现有技术中在对不同类别的协议内容进行解析时,需要改变全部解析代码来对协议内容进行解析导致的解析代码的开发次数较多的技术问题。

根据本发明实施例提供了一种协议的解析方法,包括:获取待解析协议;判断所述待解析协议中是否携带目标值和/或循环体,得到判断结果,其中,所述目标值为所述待解析协议中标注出的解析完成后不需要上报的数据值,所述循环体为带有循环次数的协议内容;基于所述判断结果对所述待解析协议进行分类,得到至少一个分类组,其中,所述分类组中的待解析协议携带目标值和循环体中任意一种,或者,所述分类组中的待解析协议均不携带目标值和循环体;获取与每个分类组相对应的解析代码,以通过所述解析代码对所述分类组进行解析,得到解析结果,其中,任意两个分类组之间所对应的解析代码中对目标值和/或循环体进行解析的代码不相同。

进一步地,获取待解析协议包括:对待处理协议的协议体进行初选,确定所述协议体的协议头和协议长度,其中,所述协议头为协议的协议类型;基于所述协议体的所述协议头和协议长度,对所述待处理协议进行切分,得到所述待解析协议。

进一步地,获取与每个分类组相对应的解析代码,以通过所述解析代码对所述分类组进行解析,得到解析结果包括:获取第一解析代码,其中,所述第一解析代码为与第一分类组相对应的解析代码,所述第一分类组中所包含的所述待解析协议为携带有目标值的所述待解析协议;通过所述第一解析代码对所述第一分类组进行解析,得到第一解析结果。

进一步地,通过所述第一解析代码对所述第一分类组进行解析,得到第一解析结果包括:通过所述第一解析代码中所携带的第一解析参数对每个所述待解析协议依次进行解析,其中,所述第一解析参数包括以下至少之一:所述待解析协议的名字,所述待解析协议的描述内容和所述待解析协议的引用内容。

进一步地,所述引用内容为所述目标值的信息,包括:所述目标值的名字,所述目标值的描述内容,所述目标值的长度和所述目标值的类型。

进一步地,获取与每个分类组相对应的解析代码,以通过所述解析代码对所述分类组进行解析,得到解析结果还包括:获取第二解析代码,其中,所述第二解析代码为与第二分类组相对应的解析代码,所述第二分类组中所包含的所述待解析协议为携带有循环体的所述待解析协议;通过所述第二解析代码对所述第二分类组进行解析,得到第二解析结果。

进一步地,通过所述第二解析代码对所述第二分类组进行解析,得到第二解析结果包括:通过所述第二解析代码中所携带的第二解析参数对每个所述待解析协议依次进行解析,其中,所述第二解析参数包括以下至少之一:待解析协议的名字,待解析协议的描述内容,待解析协议的长度,待解析协议的类型和待解析协议的循环体,所述待解析协议的循环体中包括:所述循环体的名字,所述循环体的描述内容,所述循环体的长度和所述循环体的类型。

进一步地,获取与每个分类组相对应的解析代码,以通过所述解析代码对所述分类组进行解析,得到解析结果还包括:获取第三解析代码,其中,所述第三解析代码为与第三分类组相对应的解析代码,所述第三分类组中所包含的所述待解析协议为不携带循环体和目标值的所述待解析协议;通过所述第三解析代码对所述第三分类组进行解析,得到第三解析结果。

进一步地,通过所述第三解析代码对所述第三分类组进行解析,得到第三解析结果包括:通过所述第三解析代码中所携带的第三解析参数对每个所述待解析协议依次进行解析,其中,所述第三解析参数包括以下至少之一:待解析协议的名字,待解析协议的描述内容,待解析协议的长度和待解析协议的类型。

根据本发明实施例,还提供了一种协议的解析装置,包括:获取单元,用于获取待解析协议;判断单元,用于判断所述待解析协议中是否携带目标值和/或循环体,得到判断结果,其中,所述目标值为所述待解析协议中标注出的解析完成后不需要上报的数据值,所述循环体为带有循环次数的协议内容;分类单元,用于基于所述判断结果对所述待解析协议进行分类,得到至少一个分类组,其中,所述分类组中的待解析协议携带目标值和循环体中任意一种,或者,所述分类组中的待解析协议均不携带目标值和循环体;解析单元,用于获取与每个分类组相对应的解析代码,以通过所述解析代码对所述分类组进行解析,得到解析结果,其中,任意两个分类组之间所对应的解析代码中对目标值和/或循环体进行解析的代码不相同。

在本发明中,通过目标值和循环体对待解析协议进行分类,能够确定所属于同一类型的待解析协议,从而对同一类型的待解析协议采用相同的解析代码进行解析,其中,任意两个分类组之间所对应的解析代码中对目标值或循环体进行解析的代码不同,通过该方式,仅需要改变解析代码中的部分代码,而不需要改变解析代码中的全部代码,进而解决了由于现有技术中在对不同类别的协议内容进行解析时,需要改变全部解析代码来对协议内容进行解析导致的解析代码的开发次数较多的技术问题,从而实现了减少开发协议的解析代码的次数,以及降低人力成本的技术效果。

附图说明

为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是根据本发明实施例提供的一种协议的解析方法流程图;

图2是根据本发明实施例提供的一种可选的协议的解析方法中步骤s102的流程图;

图3是根据本发明实施例提供的一种可选的协议的解析方法中步骤s108的流程图;

图4是根据本发明实施例提供的一种协议的解析装置的示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

实施例一:

图1是根据本发明实施例提供的一种协议的解析方法流程图,如图1所示,该方法包括如下步骤:

步骤s102,获取待解析协议;

步骤s104,判断待解析协议中是否携带目标值和/或循环体,得到判断结果,其中,目标值为待解析协议中标注出的解析完成后不需要上报的数据值,循环体为带有循环次数的协议内容;

需要说明的是,在本发明实施例中,目标值又可以称为非必须值,表示为待解析协议中标注出的解析完成后不需要上报的数据值。

步骤s106,基于判断结果对待解析协议进行分类,得到至少一个分类组,其中,分类组中的待解析协议携带目标值和循环体中任意一种,或者,分类组中的待解析协议均不携带目标值和循环体;

步骤s108,获取与每个分类组相对应的解析代码,以通过解析代码对分类组进行解析,得到解析结果,其中,任意两个分类组之间所对应的解析代码中对目标值和/或循环体进行解析的代码不相同。

在本发明实施例中,上述协议的解析方法整体可以用解析代码描述为:

需要说明的是,解析代码中的非必须值即为上述目标值,解析代码中的对象即为上述待解析协议,解析代码中的单个对象即为上述同时不携带非必须值和循环体的待解析协议。

在本发明中,通过目标值和循环体对待解析协议进行分类,能够确定所属于同一类型的待解析协议,从而对同一类型的待解析协议采用相同的解析代码进行解析,其中,任意两个分类组之间所对应的解析代码中对目标值或循环体进行解析的代码不同,通过该方式,仅需要改变解析代码中的部分代码,而不需要改变解析代码中的全部代码,进而解决了由于现有技术中在对不同类别的协议内容进行解析时,需要改变全部解析代码来对协议内容进行解析导致的解析代码的开发次数较多的技术问题,从而实现了减少开发协议的解析代码的次数,以及降低人力成本的技术效果。

在一个可选的实施方式中,如图2所示,步骤s102,获取待解析协议包括如下步骤:

步骤s1021,对待处理协议的协议体进行初选,确定协议体的协议头和协议长度,其中,协议头为协议的协议类型;

步骤s1022,基于协议体的协议头和协议长度,对待处理协议进行切分,得到待解析协议。

在本发明实施例中,首先,需要对待处理协议的协议体进行初选,确定协议体的协议头和协议长度,然后,根据协议头和协议长度,对待处理协议进行切分,将满足条件的待处理协议作为待解析协议,并将该待处理协议加入到待解析协议的队列中。

下面以一个具体的实施例来对上述初选过程进行描述。

假设某待处理协议的协议体为:3200030000000101000300000000,其中,该协议体所代表的格式为:协议头+协议版本号+服务号+实体编号+包体编号+长度(也即,协议长度)+内容+校验码,则该协议的解析规则为:

protocol01("0-32","1-00","3-[03,08]","8-[3:6]","11-[0:255]","0","[00,01]"),其中,这段协议体表示:

头部位移:0,内容32;

版本号位移:1,内容00;

服务码位移:3,内容:包含了03和08;

设备号位移:3~6,长度为8;

长度位移:11,长度范围为0~255个字节;

大小端方式:0(0为大端模式,1为小端模式);

加解密方式限制:空为全支持,如果是[00,01]表示只支持不加密和aes一种加密。

通过上述描述可知,在本发明实施例中,可以通过解析规则protocol01("0-32","1-00","3-[03,08]","8-[3:6]","11-[0:255]","0","[00,01]")来对待处理协议的协议体进行解析,从而在待处理协议的协议体中确定待处理协议的协议头和协议长度,从而完成待处理协议的初选。

上述解析规则决定了一种协议的基本类型和长度规则。

同理,假设另一种待处理协议的协议体为:6001000000000100320603000006,其中,该协议体所代表的格式为:协议头+协议版本号+服务号+实体编号+长度(也即,协议长度)+校验码+内容,那么该协议的解析规则为:

protocol02("0-60","1-01","3-[00,03]","10-[3:8]","10-[0:30]","1","[03]"),其中,这段协议体表示:

头部位移:0,内容60;

版本号位移:1,内容01;,

服务码位移:3,内容包含了00和03;

设备号位移:3~8,长度为10;

长度位移:10,长度范围为0~30个字节;

大小端方式:1(0为大端模式,1为小端模式);

加解密方式限制:空为全支持,只支持03的加解密方式。

通过上述描述可知,在本发明实施例中,可以通过解析规则protocol02("0-60","1-01","3-[00,03]","10-[3:8]","10-[0:30]","1","[03]"),来对该待处理协议的协议体进行解析,从而在该待处理协议的协议体中确定该待处理协议的协议头和协议长度,从而完成该待处理协议的初选。

通过对上述两条协议体的不同规则的细化,则可以根据协议体的头部和协议长度,来确定每个协议的切分。

下面以一个具体的实施例来对上述切分过程进行描述。

假设某协议为:3200030000000101000300000000|3200080000000102000800013225587874fa87|6001000000000100320603000006,需要说明的是,为了能表达明确,所以三条协议之间使用了"|"分割,但是整体的协议是连续无空格的。

首先,对协议头为32的待处理协议进行筛选,根据以下筛选规则确定当前待处理协议是否为待解析协议。在一个可选的实施方式中,该筛选规则表示为:protocol01("0-32","1-00","3-[03,08]","8-[3:6]","11-[0:255]","0","[00,01]")。其中,该筛选规则表示为:检查头部(即,协议头)是否为32,检查长度位移(也即,协议长度)是否正确,检查服务码是否在合理的范围之内,检查版本号是否是规定的值。根据筛选规则中的长度位移获取长度值,从而根据长度值截取出上述三条协议中协议头为“32”的协议。在协议头为“32”的协议中,满足上述筛选规则的协议(即,第一条协议)加入到待解析协议的队列中。

同理,第二条和第三条协议也是按照相似的方式进行截取。

需要说明的是,假设出现断包的协议,如:000300320000|3200080000000102000800013225587874fa87|6001000000000100320603000006000300320000,则这段协议是不能被解析出来的,那么这段协议是需要抛弃掉的。首先,对该段待解析协议协议进行筛选,获取到了32出现的第一个位置,但是发现不能满足协议的筛选规则中服务码的需求,则第一个32将被抛弃掉,如此将检索出第二个32或者60出现的位置,发现第二个32满足了协议中的所有要求,则将协议加入到待解析协议的队列中。

在另一个可选的实施方式中,如图3所示,步骤s108,获取与每个分类组相对应的解析代码,以通过解析代码对分类组进行解析,得到解析结果包括如下步骤:

步骤s1081,获取第一解析代码,其中,第一解析代码为与第一分类组相对应的解析代码,第一分类组中所包含的待解析协议为携带有目标值的待解析协议;

步骤s1082,通过第一解析代码对第一分类组进行解析,得到第一解析结果。

具体地,通过第一解析代码对第一分类组进行解析,得到第一解析结果包括:通过第一解析代码中所携带的第一解析参数对每个待解析协议依次进行解析,其中,第一解析参数包括以下至少之一:待解析协议的名字,待解析协议的描述内容和待解析协议的引用内容。

在本发明实施例中,协议的数据体内容不同于协议的其他组成部分那么固定,其中,数据体部分存在着不固定(即,目标值)、循环、循环套循环等多种数据方式。因此,对数据的解析按照固定格式去匹配解析代码是无法适应的,需要根据协议的内容来制定一套具体的规则,即上述将协议内容进行分类的过程。

在本发明实施例中,如果协议中是带有目标值的数据内容的(即,上述第一分类组中的待解析协议),则获取相应的解析代码(即,上述第一解析代码)对该协议进行解析。例如,上述第一解析代码中的部分代码可以描述为:

需要说明的是,上述代码中的“xxxx”表示协议中的具体数据名称或描述类型等,在本发明实施例中不具有具体含义,在本说明书中不再做具体说明,下同。

具体地,引用内容即为目标值的信息,包括:目标值的名字,目标值的描述内容,目标值的长度和目标值的类型。例如,可以描述为:

在本发明实施例中,一次上报的协议内容可以看作是多个协议体一起上报,并且允许某个协议体不上传,即,上述目标值,这样对协议的解析产生了不确定性,如果写死代码则表示只能适应相对应的协议的解析,一旦协议体出现变动,就会导致整个解析代码的重构和重新整体测试,这就增加了开发协议的解析代码的次数,增加了人力成本。

在本发明中,通过目标值和循环体对待解析协议进行分类,能够确定所属于同一类型的待解析协议,从而对同一类型的待解析协议采用相同的解析代码进行解析,其中,任意两个分类组之间所对应的解析代码中对目标值或循环体进行解析的代码不同,通过该方式,仅需要改变解析代码中的部分代码,而不需要改变解析代码中的全部代码,进而解决了由于现有技术中在对不同类别的协议内容进行解析时,需要改变全部解析代码来对协议内容进行解析导致的解析代码的开发次数较多的技术问题,从而实现了减少开发协议的解析代码的次数,以及降低人力成本的技术效果。

在一个可选的实施方式中,如图3所示,步骤s108,获取与每个分类组相对应的解析代码,以通过解析代码对分类组进行解析,得到解析结果还包括如下步骤:

步骤s1083,获取第二解析代码,其中,第二解析代码为与第二分类组相对应的解析代码,第二分类组中所包含的待解析协议为携带有循环体的待解析协议;

步骤s1084,通过第二解析代码对第二分类组进行解析,得到第二解析结果。

具体地,通过第二解析代码对第二分类组进行解析,得到第二解析结果包括:通过第二解析代码中所携带的第二解析参数对每个待解析协议依次进行解析,其中,第二解析参数包括以下至少之一:待解析协议的名字,待解析协议的描述内容,待解析协议的长度,待解析协议的类型和待解析协议的循环体,其中,待解析协议的循环体中包括:循环体的名字,循环体的描述内容,循环体的长度和循环体的类型。

在本发明实施例中,如果协议中是带有循环体的数据内容的(即,上述第二分类组中的待解析协议),则获取相应的解析代码(即,上述第二解析代码)对该协议进行解析。

在本发明实施例中,循环体指的是协议内容中带有循环内容的部分,循环内容一般会携带有循环的次数。因此,上述第二解析代码中的部分代码可以描述为:

在另一个可选的实施方式中,如图3所示,步骤s108,获取与每个分类组相对应的解析代码,以通过所述解析代码对所述分类组进行解析,得到解析结果还包括如下步骤:

步骤s1085,获取第三解析代码,其中,第三解析代码为与第三分类组相对应的解析代码,第三分类组中所包含的待解析协议为不携带循环体和目标值的待解析协议;

步骤s1086,通过第三解析代码对第三分类组进行解析,得到第三解析结果。

具体地,通过第三解析代码对第三分类组进行解析,得到第三解析结果包括:通过第三解析代码中所携带的第三解析参数对每个待解析协议依次进行解析,其中,第三解析参数包括以下至少之一:待解析协议的名字,待解析协议的描述内容,待解析协议的长度和待解析协议的类型。

在本发明实施例中,如果协议中是不携带循环体和目标值的数据内容的(即,上述第三分类组中的待解析协议),则该协议可以看作携带的数据内容为固定内容和长度的数据内容,可以获取相应的解析代码(即,上述第三解析代码)对该协议进行解析。例如,上述第三解析代码中的部分代码可以固定的描述为:

在本发明中,通过目标值和循环体对待解析协议进行分类,能够确定所属于同一类型的待解析协议,从而对同一类型的待解析协议采用相同的解析代码进行解析,其中,任意两个分类组之间所对应的解析代码中对目标值或循环体进行解析的代码不同,通过该方式,仅需要改变解析代码中的部分代码,而不需要改变解析代码中的全部代码,进而解决了由于现有技术中在对不同类别的协议内容进行解析时,需要改变全部解析代码来对协议内容进行解析导致的解析代码的开发次数较多的技术问题,从而实现了减少开发协议的解析代码的次数,以及降低人力成本的技术效果。

实施例二:

本发明实施例还提供了一种协议的解析装置,该协议的解析装置主要用于执行本发明实施例上述内容所提供的协议的解析方法,以下对本发明实施例提供的协议的解析装置做具体介绍。

图4是根据本发明实施例提供的一种协议的解析装置的示意图,如图4所示,该协议的解析装置主要包括获取单元10,判断单元20,分类单元30和解析单元40,其中:

获取单元10,用于获取待解析协议;

判断单元20,用于判断待解析协议中是否携带目标值和/或循环体,得到判断结果,其中,目标值为待解析协议中标注出的解析完成后不需要上报的数据值,循环体为带有循环次数的协议内容;

分类单元30,用于基于判断结果对待解析协议进行分类,得到至少一个分类组,其中,分类组中的待解析协议携带目标值和循环体中任意一种,或者,分类组中的待解析协议均不携带目标值和循环体;

解析单元40,用于获取与每个分类组相对应的解析代码,以通过所述解析代码对所述分类组进行解析,得到解析结果,其中,任意两个分类组之间所对应的解析代码中对目标值和/或循环体进行解析的代码不相同。

在本发明中,通过目标值和循环体对待解析协议进行分类,能够确定所属于同一类型的待解析协议,从而对同一类型的待解析协议采用相同的解析代码进行解析,其中,任意两个分类组之间所对应的解析代码中对目标值或循环体进行解析的代码不同,通过该方式,仅需要改变解析代码中的部分代码,而不需要改变解析代码中的全部代码,进而解决了由于现有技术中在对不同类别的协议内容进行解析时,需要改变全部解析代码来对协议内容进行解析导致的解析代码的开发次数较多的技术问题,从而实现了减少开发协议的解析代码的次数,以及降低人力成本的技术效果。

本发明实施例所提供的装置,其实现原理及产生的技术效果和前述方法实施例相同,为简要描述,装置实施例部分未提及之处,可参考前述方法实施例中相应内容。

另外,在本发明实施例的描述中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。

在本发明的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

最后应说明的是:以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1