CN106412086A - 一种利用协议描述文件自动生成通信代码的方法及系统 - Google Patents
一种利用协议描述文件自动生成通信代码的方法及系统 Download PDFInfo
- Publication number
- CN106412086A CN106412086A CN201610933885.XA CN201610933885A CN106412086A CN 106412086 A CN106412086 A CN 106412086A CN 201610933885 A CN201610933885 A CN 201610933885A CN 106412086 A CN106412086 A CN 106412086A
- Authority
- CN
- China
- Prior art keywords
- communication
- keyword
- data
- agreement
- file
- 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.)
- Granted
Links
- 230000006854 communication Effects 0.000 title claims abstract description 157
- 238000004891 communication Methods 0.000 title claims abstract description 153
- 238000000034 method Methods 0.000 title claims abstract description 53
- 238000004458 analytical method Methods 0.000 claims description 20
- 238000007667 floating Methods 0.000 claims description 5
- 238000007493 shaping process Methods 0.000 claims description 3
- 230000008569 process Effects 0.000 abstract description 15
- 238000011161 development Methods 0.000 abstract description 11
- 238000013461 design Methods 0.000 abstract description 10
- 230000005856 abnormality Effects 0.000 abstract description 4
- 210000001503 joint Anatomy 0.000 abstract 1
- 230000006870 function Effects 0.000 description 63
- 230000006399 behavior Effects 0.000 description 9
- 235000006719 Cassia obtusifolia Nutrition 0.000 description 8
- 235000014552 Cassia tora Nutrition 0.000 description 8
- 244000201986 Cassia tora Species 0.000 description 8
- 230000002159 abnormal effect Effects 0.000 description 5
- 230000004048 modification Effects 0.000 description 5
- 238000012986 modification Methods 0.000 description 5
- 230000008901 benefit Effects 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 3
- 241001269238 Data Species 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000003032 molecular docking Methods 0.000 description 2
- 239000011800 void material Substances 0.000 description 2
- 206010008190 Cerebrovascular accident Diseases 0.000 description 1
- 208000006011 Stroke Diseases 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 230000003387 muscular Effects 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/34—Network arrangements or protocols for supporting network services or applications involving the movement of software or configuration parameters
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/03—Protocol definition or specification
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Computer And Data Communications (AREA)
- Communication Control (AREA)
Abstract
本发明公开了一种利用协议描述文件自动生成通信代码的方法,能够自动获取并解析该协议描述文件,并且自动生成与协议描述文件相关的通信代码逻辑。由于本发明能够自动生成客户端和服务端通信代码,进而在客户端和服务段通信时,可直接调用该通信代码进行数据通信,并能够保证发送接口和接受接口的对接没有异常,同时也极大的降低了开发过程中由于客户端和服务端的疏忽可能产生的通信异常的概率。进一步的,开发者只需要关注第一关键字和第二关键字进行自定义协议格式之后形成的用于描述通信协议的描述文件的设计,不需要去实现所有通信过程,能够大幅提高开发者的在通信部分的开发效率。
Description
技术领域
本申请涉及通信技术领域,尤其涉及一种利用协议描述文件自动生成通信代码的方法及系统。
背景技术
在常见的CS架构中,客户端和服务端通常是通过HTTP协议进行通信的。在客户端和服务端定义好相关的协议后,客户端需要针对定义好的协议去开发相关的访问接口程序,服务端也需要根据对应的接口去开发出相应的接口程序。在网络访问中访问网络的大体过程基本是通用的,不同的地方是协议中定义的不同数据类型。
通过上面分析我们可以发现我们可以把通信过程的过程分为2个部分,其一是通用的通信方法,其二是不同的通信数据。由于方法是通用的,所以客户端和服务端在开发的时候很多时候写的代码冗余会非常多,很多代码部分都是高度相似的,软件开发人员在编写这些高度相似代码的时候是一个比较大的体力活。
由于服务器和客户端的开发时分开进行的,这样就很可能会因为开发者的疏忽或者不注意导致双方通信过程中因为接口实现的差异导致无法进行通信成功。
发明内容
本发明了提供了一种利用协议描述文件自动生成通信代码的方法及系统,以解决现有通信中由于接口实现的差异导致无法进行通信的技术问题,能够提高开发效率,降低开发成本,并且能够极大的提高稳定性的方案。在实际应用中能够对开发起到非常大的作用。
本发明提供了一种利用协议描述文件自动生成通信代码的方法,所述方法包括:
获得所述协议描述文件,所述协议描述文件是对第一关键字和第二关键字进行自定义协议格式之后形成的用于描述通信协议的描述文件;
解析所述协议描述文件,并利用所述协议描述文件生成所述通信代码,所述通信代码供客户端和服务器在进行通信时调用,以实现所述客户端和所述服务端之间的通信。
优选的,所述解析所述协议描述文件,包括:
判断所述协议描述文件是否包含所述第一关键字;
若协议描述文件包含所述第一关键字,则从所述协议描述文件解析出所述客户端和所述服务端之间往来的通信数据的描述信息;
利用所述通信数据的描述信息生成第一通信代码;
若协议描述文件不包含所述第一关键字,则进一步判断协议描述文件是否包含所述第二关键字;
若协议描述文件包含所述第二关键字,则从所述协议描述文件解析出通信接口的接口函数描述信息;
利用所述通信接口的接口函数描述信息生成第二通信代码。
优选的,所述判断所述协议描述文件是否包含所述第一关键字,包括:
依次获取所述协议描述文件的每行信息,并依次判断所述协议描述文件的每行信息是否为第一关键字;
所述若协议描述文件包含所述第一关键字,则从所述协议描述文件解析出所述客户端和所述服务端之间往来的通信数据的描述,包括:
若有一行信息为所述第一关键字,则获取所述一行信息包含的一行或者多行数据,并依次解析出所述一行或者多行数据的数据类型。
所述利用所述通信数据的描述信息生成通信代码,包括:
利用解析出的所述一行信息对应的所有数据类型生成第一通信代码。
优选的,所述依次解析出所述一行或者多行数据的数据类型之后,包括:
将所述一行或者多行数据对应的数据类型存入第一集合中。
优选的,所述若协议描述文件不包含所述第一关键字,则进一步判断协议描述文件是否包含所述第二关键字,包括:
若所述一行信息不为所述第一关键字,则进一步判断所述一行信息是否为第二关键字;
所述若协议描述文件包含所述第二关键字,则从所述协议描述文件解析出通信接口的接口函数描述,包括:
若所述一行信息是所述第二关键字,解析第二关键字包含的一行或者多行数据;
依次读取所述一行信息包含的一行或者多行数据,以分离出每行数据对应的接口函数参数;
依次判断每行数据对应的接口函数参数是否包含所述第一关键字;
若包含,则调用所述第一集合,依次判断每行数据对应的接口函数参数的数据类型是否存在于所述第一集合中,若有一行数据对应的接口函数参数的数据类型存在于所述第一集合中,则表示所述一行数据对应的接口函数参数解析成功;
利用所述通信接口的接口函数描述生成第二源文件,包括:
利用解析成功的接口函数生成第二通信代码。
优选的,所述依次判断每行数据对应的接口函数参数的数据类型是否存在于所述第一集合中之后,包括:
若有一行数据对应的接口函数参数的数据类型存在于所述第一集合中,将所述一行数据对应的接口函数参数的数据类型保存在第二集合中。
优选的,所述第一关键字为Struct(结构体)关键字,所述Struct关键字用于对客户端和服务端之间往来的通信数据的描述;
所述第二关键字为Interface(接口)关键字,所述Interface关键字用于所述客户端和所述服务端之间的通信行为的描述。
优选的,所述Struct关键字包含的数据类型至少包括:浮点型float、整形int、长整型long、双精度浮点型double、布尔型boolean。
优选的,利用所述协议描述文件生成所述通信代码之后,包括:
将所述通信代码发送给所述服务端。
在本发明实施例中,还公开了一种利用协议描述文件自动生成通信代码的系统,包括:
获得模块,用于获得所述协议描述文件,所述协议描述文件是对第一关键字和第二关键字进行自定义协议格式之后形成的用于描述通信协议的描述文件;
解析模块,用于解析所述协议描述文件,并利用所述协议描述文件生成所述通信代码,所述通信代码供客户端和服务器在进行通信时调用,以实现所述客户端和所述服务端之间的通信。
通过本发明的一个或者多个技术方案,本发明具有以下有益效果或者优点:
本发明的方案提供了一种利用协议描述文件自动生成通信代码的方法,能够自动获取并解析该协议描述文件,并且自动生成与协议描述文件相关的通信代码逻辑。由于本发明能够自动生成客户端和服务端通信代码,进而在客户端和服务段通信时,可直接调用该通信代码进行数据通信,并能够保证发送接口和接受接口的对接没有异常,同时也极大的降低了开发过程中由于客户端和服务端的疏忽可能产生的通信异常的概率。进一步的,开发者只需要关注第一关键字和第二关键字进行自定义协议格式之后形成的用于描述通信协议的描述文件的设计,不需要去实现所有通信过程,能够大幅提高开发者的在通信部分的开发效率。
附图说明
图1为本发明实施例中一种利用协议描述文件自动生成通信代码的方法的实施过程图;
图2为本发明实施例中解析协议描述文件的流程图;
图3为本发明实施例中一种利用协议描述文件自动生成通信代码的系统的组成示意图。
具体实施方式
为了使本申请所属技术领域中的技术人员更清楚地理解本申请,下面结合附图,通过具体实施例对本申请技术方案作详细描述。
CS:Client/Server架构,即服务器/客户端架构。是大家熟知的软件系统体系结构,通过将任务合理分配到Client端和Server端,降低了系统的通讯开销,需要安装客户端才可进行管理操作。
HTTP协议:超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。
值类型的数据:值类型这个概念经常出现在类似C#,JAVA等编程语言的书籍中."值类型"直接将内存存储在栈内,由系统自动释放资源的数据类型.
引用类型的数据:引用类型由类型的实际值引用(类似于指针)表示的数据类型。如果为某个变量分配一个引用类型,则该变量将引用(或“指向”)原始值。不创建任何副本。引用类型包括类、接口、委托和装箱值类型。
JDK:JDK是Java语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境,JAVA工具和JAVA基础的类库。
正则表达式:正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表通常被用来检索、替换那些符合某个模式(规则)的文本。
JavaBean:JavaBean是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,long和class方法获取。众所周知,属性名称符合这种模式,其他Java类可以通过自省机制发现和操作这些JavaBean的属性。
本发明是一个通过自定义协议文件(也可以称为:协议描述文件)自动生成通信代码的方法,将协议描述文件进行解析之后,最后生成源文件(就是通信代码)。该源文件一方面会封装到HTTP请求中,然后将HTTP请求发给服务器。另一方面该源文件会保存在客户端,进而程序员在调用时,将生成的源文件直接放入到自己的项目中就可以正常调用并且能够以此和服务器进行正常通行。
由此可见,通过本方案生成的通信代码能够供开发者直接调用,而不需要再要求开发者进行编程,能够极大的提高开发者的开发效率,同时由于能够自动生成客户端和服务端的通信代码,这样也极大的降低了客户端和服务端通信出错的概率。另外,由于代码是自动生成的,所以也极大的降低开发人员的开发人力成本,为企业大大降低人力开销。
在具体的实施过程中,下面请参看图1,是本发明的实施过程图。
S1,获得协议描述文件。
协议描述文件,是本发明自定义的描述文件,为TXT格式。
在执行本发明S1(获得协议描述文件)之前,本发明会先利用两个关键字进行自定义协议格式;来生成协议描述文件。
故而,本发明定义的协议描述文件,实际上是对第一关键字和第二关键字进行自定义协议格式之后形成的用于描述通信协议的描述文件。
为了增加该协议描述文件的可读性和易解析性,本发明利用两个关键字对通信描述协议进行自定义设计:Struct(结构体)关键字和interface(接口)关键字。
下面分别对本发明自定义的两个关键字进行详细描述。
Struct关键字:
这个Struct关键字代表一个结构体,用于对客户端和服务端之间往来的通信数据的数据结构组成的描述。
通常来说,为了方便客户端和服务端之间的通信,通常会把关联性比较大的通信数据进行封装成一个结构体,然后直接使用该结构体来进行通信。而为了方便描述客户端和服务端往来的通信数据,本发明使用了Struct来描述通信数据的结构组成(该结构组成至少包括通信数据的数据类型),故而Struct关键字表示的结构体,至少包括通信数据的数据类型。
每个Struct关键字,都对应有一个各自的数据结构,而在每个数据结构中,都具有各自的数据类型。
Struct中可以包含基本的数据类型(例如:浮点型float、整形int、长整型long、双精度浮点型double、布尔型boolean),也可以包含其他Struct的数据类型。
通过上述Struct的设计,可以使用Struct来描述程序里面的任何通信数据的数据类型。
为了方便理解,下面举例说明利用对Struct关键字进行自定义协议格式之后,形成的协议描述文件。
举例说明如下:
Struct Brithday
{
Long daytime;
}
在此协议描述文件中,我们首先定义了一个数据结构Brithday,该数据结构中包含一个long类型的daytime参数,该参数表明的是生日时间。
Struct Person
在此协议描述文件中,描述了一个Person的数据结构,该结构中包含了一个int类型的age参数,该参数表示的是用户的年龄信息,同时Person数据结构中还包含了一个Brithday的bday数据,这个数据是用于描述生日信息的。
可以看得出来上述2个协议描述文件的数据结构中,Brithday的数据结构仅仅包含值类型的数据结构,而Person中除了包含值类型的数据结构以外,还包含了一个Struct类型的Brithday的引用数据类型。
通过这个实例的举例我们对Struct关键字的理解更加清晰和深刻。Struct主要是针对客户端和服务端通信数据的结构组成的描述。
Interface:
Interface关键字用于所述客户端和所述服务端通信行为的描述。
在协议描述文件的设计中,除了对通信数据的数据类型进行设计之外,本发明还会对客户端和服务端的通信行为进行设计。而通信行为的基础,则是通信接口的定义。
通信接口,主要是客户端和服务器进行沟通的桥梁,通信数据则类似于这个桥梁上的小汽车。
下面我们看看此Interface是如何定义通信接口的。
Interface关键字的内部,主要是定义了一些通信的方法,包括接口函数名称、接口函数参数的类型,返回值。这些方法是客户端和服务端进行通信的工具。
为了方便理解Interface的接口设计理念,下面通过举例说明,方便理解这个关键字的作用。
客户端:
Interface
{
Void sendInfo(Person p,ICallback callback);
}
在该客户端侧设计的通信接口中,sendInfo是相关的函数名称,Person数据类型是上文中提到的通过Struct来定义的Person数据,也就是本方案中需要发送给服务端的数据。ICallback是异常和结果反馈接口,有异常或结果有信息返回的时候会通过ICallback这个接口转发给开发者。
服务端:
Interface
{
Void receiverInfo(Person p,ICallback callback);
}
在该服务端设计的通信接口中,receiverInfo是相关的函数名称,Person数据类型是上文中提到的通过Struct来定义的Person数据,也就是本方案中服务端需要接收的数据。ICallback是异常和结果反馈接口,有异常或结果有信息返回的时候会通过ICallback这个接口转发给开发者。
上述示例中,总共设计了2个通信接口,第一个是客户端的通信接口,发送数据给服务端用的,另外一个是服务端的通信接口,用于接收客户端发送过来的信息。
通过上面的描述发现,Interface主要作用是用于对客户端和服务端之间的通信行为的描述。
以上便是有关协议描述文件的介绍,本发明的协议描述文件,是采用了两个关键字(Struct和interface)进行自定义格式之后形成的,用于描述通信协议的描述文件。
故而在获得协议描述文件之后,最主要的目的就是为了执行下面的步骤:
S2,解析所述协议描述文件,并利用所述协议描述文件生成所述通信代码,所述通信代码供客户端和服务器在进行通信时调用,以实现客户端和服务端之间的通信。
解析协议描述文件的过程如下:
判断协议描述文件是否包含所述第一(Struct)关键字。
若协议描述文件包含所述第一关键字,则从所述协议描述文件解析出所述客户端和所述服务端之间往来的通信数据的描述信息,然后利用所述通信数据的描述信息生成第一通信代码。
若协议描述文件不包含所述第一关键字,则进一步判断协议描述文件是否包含所述第二关键字,若协议描述文件包含所述第二关键字,则从所述协议描述文件解析出通信接口的接口函数描述信息;然后利用所述通信接口的接口函数描述信息生成第二通信代码。
而在判断协议描述文件是否包含所述第一(Struct)关键字的具体实施中,会依次获取所述协议描述文件的每行信息,并依次判断所述协议描述文件的每行信息是否为第一关键字,若有一行信息为所述第一关键字,则获取所述一行信息包含的一行或者多行数据,并依次解析出所述一行或者多行数据的数据类型。然后利用解析出的所述一行信息对应的所有数据类型生成第一通信代码。
作为一种可选的实施例,在依次解析出所述一行或者多行数据的数据类型之后,可将所述一行或者多行数据的数据类型存入第一集合中。
而若协议描述文件不包含所述第一关键字,则进一步判断协议描述文件是否包含所述第二(Interface)关键字并进行后续处理。
在具体的实施过程中,若所述一行信息不为所述第一关键字,则进一步判断所述一行信息是否为第二关键字;若所述一行信息是所述第二关键字,解析第二关键字包含的一行或者多行数据;然后依次读取所述一行信息包含的一行或者多行数据,以分离出每行数据对应的接口函数参数;并依次判断每行数据对应的接口函数参数是否包含所述第一关键字;若包含,则调用所述第一集合,依次判断每行数据对应的接口函数参数的数据类型是否存在于所述第一集合中,若有一行数据对应的接口函数参数的数据类型存在于所述第一集合中,则表示所述一行数据对应的接口函数参数解析成功;然后利用解析成功的接口函数生成第二通信代码。
作为一种可选的实施例,若有一行数据对应的接口函数参数的数据类型存在于所述第一集合中,将所述一行数据对应的接口函数参数的数据类型保存在第二集合中。
具体的解析逻辑如图2所示:
S201,将协议描述文件读取到内存中。
具体读取方法,是通过JDK提供的文件读取方法,将协议描述文件读取到文件输入流中,具体实施函数是FileInputStream(file),通过系统函数FileInputStream的调用,可以将协议描述文件file读取到内存中。
为了方便后续的描述本发明将读取到的文件输入流用变量inputStream来标示。
文件输入流inputStream中有一个readline函数,该函数的主要功能是读取文件中的一整行数据。我们通过调用readline函数得到文件的这一行的lineInfo(标示文件的一整行信息)。
S202,获取所述协议描述文件的一行lineInfo,并依次判断这一行lineInfo是否为Struct关键字。
在具体的实施过程中,首先,对协议描述文件的这一行lineInfo内容进行判断,首先判断这一行lineInfo是不是Struct。本处的判断方式是通过调用java中String类中的equals方法去判断2个字符串是否相等来判别的,下文所有判别方法相同。
若判断出所述协议描述文件的这一行lineInfo是Struct关键字:
执行S203的步骤:获取所述Struct关键字中的包含的一行或者多行数据,并依次解析出所述一行或者多行数据的数据类型。即:解析整个Struct后面“{}”内的信息。解析方法就是每次读取一行数据,则解析出该数据的数据类型,然后再次读取一行数据,并解析出该数据的数据类型,以此按照顺序依次解析出Struct关键字中每行数据中的数据类型。当然,若Struct只有一行数据,则判断出该行数据的数据类型即可。
举例来说,当解析了Struct里面包含的第一行数据的数据类型之后,如果Struct里面还有第二行数据,那么我们就跳转到第二行数据中解析第二行数据的数据类型。当然,若还包括其他行数据,则依次跳入其他行数据进行解析,获得对应的数据类型。
例如:
Struct Person
在解析了Struct里面包含的第一行数据Int age的数据类型为Int之后,则跳转到第二行数据中解析Brithday bday的数据类型的引用数据类型。
解析完成第二行数据的数据类型后,返回继续解析上述未完成的Struct数据。
举例来说,比如解析到Brithday类型,由于Brithday并不是基本数据类型,如果在解析Person之前没有解析Brithday,那么Person是不知道Brithday是个什么类型的,此时可以先预留,等后面继续解析过程中解析出Brithday结构后,再返回来确定Person类的所有信息。
如果有多层Struct的包含关系,就逐层跳入解析然后逐层返回直到所有数据都被解析完成。
举例来说,比如解析到Brithday类型,由于Brithday并不是基本数据类型,如果在解析Person之前没有解析Brithday,那么Person是不知道Brithday是个什么类型的,此时可以先预留,等后面继续解析过程中解析出Brithday结构后,再返回来确定Person类的所有信息。
解析完成后:
执行S204的步骤:将所述一行或者多行数据对应的数据类型存入第一集合中(也称为结构体集合或者listStruct)。
本发明将所有这些的Struct数据结构解析完毕之后获得的数据和数据类型存放在一个结构体集合里面,该集合我们用listStruct进行标示。
执行S205的步骤:利用解析出的所述一行信息对应的所有数据类型生成第一通信代码。
具体来说,在执行完毕S203之后,可直接执行S205,也可以按照顺序执行S203-S204-S205。本发明对此不做限制。
每行信息可对应一个Struct关键字,进而在解析完每行信息之后,每行信息的Struct关键字可以对应生成各自的第一通信代码。并且每行信息对应的数据类型都存入各自的第一集合中。
第一通信代码也可以称作通信数据描述源文件,进而可利用第一集合中的数据类型生成通信数据描述源文件。
生成Struct关键字对应的通信数据描述源文件的过程:
一个Struct其中包含的元素信息可以从listStruct中进行获取。我们通过循环遍历的方式每次取出一个Struct的数据类型,然后通过Java写入文件接口的方式将对应的变量写入到文件中。生成源文件的格式按照JavaBean的规范进行命名和生成。其中将数据写入文件是一个通用方法,本方案中不再赘述。其次JavaBean是一个标准的文件格式类型,对其中的元素命名和函数有严格要求,是一个通用规范本方案不再详细描述JavaBean规范。
若判断出所这一行lineInfo不是Struct关键字:
执行S206,判断这一行lineInfo是不是Interface关键字。
如果这一行lineInfo也不是interface关键字:
执行S207:结束解析流程。这个时候就抛出一个异常信息,提示协议描述文件解析错误。
如果这一行lineInfo是interface关键字:
依次解析interface关键字包含的一行或者多行数据,以分离出每行数据对应的接口函数参数。
以某行数据为例。
执行S208:解析interface关键字包含的一行数据,以分离出这一行数据对应的接口函数参数。
具体来说,解析interface关键字后面”{}”内的信息。解析方法是,每次读取一行数据,分离出其中的接口函数名称,接口函数参数和返回值,其中所述接口函数参数具有自己独特的数据类型。(这个地方获取接口函数名称,接口函数的参数类型和返回值是通过正则表达式的方式来分离出来的,此处正则表达式方法是一个通用的分离字符串的方法)。
执行S209,对该行数据的接口函数参数进行判定,判定该接口函数参数是否是Struct。若不是,执行S207。
若该接口函数参数是Struct:
执行S210,调用结构体集合查找是否包含该接口函数参数的数据类型。
如果listStruct不包含该接口函数参数(param)的数据类型,即:接口函数参数的数据类型不存在于所述结构体集合listStruct中。说明interface中使用了未知的数据类型,则解析会直接停止,提示协议描述文件解析错误,此时:
执行S207,结束解析流程。
如果listStruct中包含param的数据类型,即:接口函数参数的数据类型存在于所述结构体集合listStruct中。说明是可以识别该数据结构的,解析成功。此时:
执行S211,继续依次解析Interface中的其他行数据的接口函数参数,直到interface关键字包含的一行或者多行数据都解析完成。
解析完成后,为了方便源文件的生成,执行S212,我们将所有解析出的通信接口的接口函数参数存放在一个接口集合里面,该集合我们用listInterface进行标示。当然,接口函数参数、函数名称、返回值等都存在于该集合中。当然,并非所有的接口函数都有参数和返回值,对于没有参数的,集合中关于参数部分的描述就是空的。
执行S213,利用接口集合中包含的解析成功的接口函数参数生成第二通信代码。
具体来说,在执行完毕S211之后,可直接执行S213,也可以按照顺序执行S211-S212-S213。本发明对此不做限制。
第二通信代码也叫通信行为描述源文件。
生成Interface对应的通信行为描述源文件的过程:
由于解析后所有函数信息存放在listInterface集合中,我们可以通过循环遍历的方式每次取出一条数据,该条数据包含了函数的返回值,函数名称,函数参数等信息。然后根据获得的返回值,接口函数名称,接口函数参数生成对应的第二通信代码。
第二通信代码主要是可将函数参数封装到HTTP请求中,然后将请求发给服务器。由于HTTP请求服务器这部分是一个公用方法,本方案不做详细赘述,这样就能够将所有接口对应的接口方法生成通信行为描述源文件了。
由上可知,所有通信数据的数据类型都存放在listStruct结构体中。所有通信数据的接口函数描述都存放在listInterface中。
由上可知,生成的源文件总共有2类:
第1类是Struct关键字对应的通信数据描述源文件(类型为Java源文件),并且一个Struct关键字对应一个Java源文件,因为在网络传输中一个Struct关键字对应一个数据结构,该数据结构在网络中进行传输一定需要对其进行序列化才能进行传输。所以对于每一个Struct都需要生成一个通信数据描述源文件,然后在该源文件中实现序列化接口。
第2类是Interface关键字对应的通信行为描述源文件(类型为Java源文件),所有的Interface关键字可以只需要生成一个Java源文件,该源文件中包含了所有的接口函数参数。
通过上述描述过程,本发明最后能够生成所有的Struct各自对应Java源文件和所有接口对应的Java源文件了。用户将生成的源文件直接放入到自己的项目中就可以正常使用并且能够和服务器进行正常通行了。
参看图3,基于同一发明构思,下面的实施例公开了一种利用协议描述文件自动生成通信代码的系统,包括:
获得模块301,用于获得所述协议描述文件,所述协议描述文件是对第一关键字和第二关键字进行自定义协议格式之后形成的用于描述通信协议的描述文件。
解析模块302,用于解析所述协议描述文件,并利用所述协议描述文件生成所述通信代码,所述通信代码供客户端和服务器在进行通信时调用,以实现所述客户端和所述服务端之间的通信。
通过本发明的一个或者多个实施例,本发明具有以下有益效果或者优点:
本方案是一套提高开发效率,降低开发成本,并且能够极大的提高稳定性的方案。在实际应用中能够对开发起到非常大的作用。
本发明的方案提供了一种利用协议描述文件自动生成通信代码的方法,能够自动获取并解析该协议描述文件,并且自动生成与协议描述文件相关的通信代码逻辑。由于本发明能够自动生成客户端和服务端通信代码,进而在客户端和服务段通信时,可直接调用该通信代码进行数据通信,并能够保证发送接口和接受接口的对接没有异常,同时也极大的降低了开发过程中由于客户端和服务端的疏忽可能产生的通信异常的概率。进一步的,开发者只需要关注第一关键字和第二关键字进行自定义协议格式之后形成的用于描述通信协议的描述文件的设计,不需要去实现所有通信过程,能够大幅提高开发者的在通信部分的开发效率。
尽管已描述了本申请的优选实施例,但本领域内的普通技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (10)
1.一种利用协议描述文件自动生成通信代码的方法,其特征在于,所述方法包括:
获得所述协议描述文件,所述协议描述文件是对第一关键字和第二关键字进行自定义协议格式之后形成的用于描述通信协议的描述文件;
解析所述协议描述文件,并利用所述协议描述文件生成所述通信代码,所述通信代码供客户端和服务器在进行通信时调用,以实现所述客户端和所述服务端之间的通信。
2.如权利要求1所述的方法,其特征在于,所述解析所述协议描述文件,包括:
判断所述协议描述文件是否包含所述第一关键字;
若协议描述文件包含所述第一关键字,则从所述协议描述文件解析出所述客户端和所述服务端之间往来的通信数据的描述信息;
利用所述通信数据的描述信息生成第一通信代码;
若协议描述文件不包含所述第一关键字,则进一步判断协议描述文件是否包含所述第二关键字;
若协议描述文件包含所述第二关键字,则从所述协议描述文件解析出通信接口的接口函数描述信息;
利用所述通信接口的接口函数描述信息生成第二通信代码。
3.如权利要求2所述的方法,其特征在于,
所述判断所述协议描述文件是否包含所述第一关键字,包括:
依次获取所述协议描述文件的每行信息,并依次判断所述协议描述文件的每行信息是否为第一关键字;
所述若协议描述文件包含所述第一关键字,则从所述协议描述文件解析出所述客户端和所述服务端之间往来的通信数据的描述,包括:
若有一行信息为所述第一关键字,则获取所述一行信息包含的一行或者多行数据,并依次解析出所述一行或者多行数据的数据类型。
所述利用所述通信数据的描述信息生成通信代码,包括:
利用解析出的所述一行信息对应的所有数据类型生成第一通信代码。
4.如权利要求3所述的方法,其特征在于,所述依次解析出所述一行或者多行数据的数据类型之后,包括:
将所述一行或者多行数据对应的数据类型存入第一集合中。
5.如权利要求4所述的方法,其特征在于,所述若协议描述文件不包含所述第一关键字,则进一步判断协议描述文件是否包含所述第二关键字,包括:
若所述一行信息不为所述第一关键字,则进一步判断所述一行信息是否为第二关键字;
所述若协议描述文件包含所述第二关键字,则从所述协议描述文件解析出通信接口的接口函数描述,包括:
若所述一行信息是所述第二关键字,解析第二关键字包含的一行或者多行数据;
依次读取所述一行信息包含的一行或者多行数据,以分离出每行数据对应的接口函数参数;
依次判断每行数据对应的接口函数参数是否包含所述第一关键字;
若包含,则调用所述第一集合,依次判断每行数据对应的接口函数参数的数据类型是否存在于所述第一集合中,若有一行数据对应的接口函数参数的数据类型存在于所述第一集合中,则表示所述一行数据对应的接口函数参数解析成功;
利用所述通信接口的接口函数描述生成第二源文件,包括:
利用解析成功的接口函数生成第二通信代码。
6.如权利要求5所述的方法,其特征在于,所述依次判断每行数据对应的接口函数参数的数据类型是否存在于所述第一集合中之后,包括:
若有一行数据对应的接口函数参数的数据类型存在于所述第一集合中,将所述一行数据对应的接口函数参数的数据类型保存在第二集合中。
7.如权利要求1-6所述的方法,其特征在于,
所述第一关键字为Struct结构体关键字,所述Struct关键字用于对客户端和服务端之间往来的通信数据的描述;
所述第二关键字为Interface接口关键字,所述Interface关键字用于所述客户端和所述服务端之间的通信行为的描述。
8.如权利要求7所述的方法,其特征在于,所述Struct关键字包含的数据类型至少包括:浮点型float、整形int、长整型long、双精度浮点型double、布尔型boolean。
9.如权利要求1所述的方法,其特征在于,利用所述协议描述文件生成所述通信代码之后,包括:
将所述通信代码发送给所述服务端。
10.一种利用协议描述文件自动生成通信代码的系统,其特征在于,包括:
获得模块,用于获得所述协议描述文件,所述协议描述文件是对第一关键字和第二关键字进行自定义协议格式之后形成的用于描述通信协议的描述文件;
解析模块,用于解析所述协议描述文件,并利用所述协议描述文件生成所述通信代码,所述通信代码供客户端和服务器在进行通信时调用,以实现所述客户端和所述服务端之间的通信。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610933885.XA CN106412086B (zh) | 2016-10-31 | 2016-10-31 | 一种利用协议描述文件自动生成通信代码的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610933885.XA CN106412086B (zh) | 2016-10-31 | 2016-10-31 | 一种利用协议描述文件自动生成通信代码的方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106412086A true CN106412086A (zh) | 2017-02-15 |
CN106412086B CN106412086B (zh) | 2020-01-03 |
Family
ID=58011939
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610933885.XA Active CN106412086B (zh) | 2016-10-31 | 2016-10-31 | 一种利用协议描述文件自动生成通信代码的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106412086B (zh) |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107832046A (zh) * | 2017-10-31 | 2018-03-23 | 北京聆云信息技术有限公司 | 数据生成方法及装置 |
CN108141464A (zh) * | 2017-03-15 | 2018-06-08 | 深圳中兴力维技术有限公司 | 一种通信协议解析代码自动生成方法及系统 |
CN109445771A (zh) * | 2018-10-25 | 2019-03-08 | 北京和普威视科技股份有限公司 | 一种cs架构下网络层模块代码自动生成工具及方法 |
CN110166326A (zh) * | 2019-06-16 | 2019-08-23 | 北京中科海讯数字科技股份有限公司 | 通信协议数据实时自动跟踪系统 |
CN110300082A (zh) * | 2018-03-21 | 2019-10-01 | 腾讯科技(深圳)有限公司 | 一种接口生成方法、装置及存储介质 |
CN111736844A (zh) * | 2020-06-05 | 2020-10-02 | 国网电力科学研究院有限公司 | 一种数据库云服务标准接口及实现方法 |
CN112714044A (zh) * | 2020-12-28 | 2021-04-27 | 北京恒光信息技术股份有限公司 | 基于形式语言协议的网络数据解析方法及装置 |
CN113536305A (zh) * | 2020-04-17 | 2021-10-22 | 武汉瓯越网视有限公司 | 检测采集行为的方法及装置 |
CN113742294A (zh) * | 2021-08-23 | 2021-12-03 | 宜通世纪科技股份有限公司 | 一种asn.1-per信令消息解码方法、系统、装置及介质 |
CN114115833A (zh) * | 2022-01-25 | 2022-03-01 | 北京安帝科技有限公司 | 协议审计代码自动生成方法及装置 |
CN114697404A (zh) * | 2022-02-25 | 2022-07-01 | 中国航发控制系统研究所 | 数控系统的上下位机通讯协议生成方法、系统及存储介质 |
CN114938397A (zh) * | 2022-05-17 | 2022-08-23 | 浙江木链物联网科技有限公司 | 一种基于kaitai的高效率协议解包组包方法、系统和可读存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102043624A (zh) * | 2010-12-17 | 2011-05-04 | 青岛海信网络科技股份有限公司 | 中间件通讯接口自动编程方法及装置 |
CN102929682A (zh) * | 2012-12-06 | 2013-02-13 | 盛科网络(苏州)有限公司 | 自动扩展tcl语言的预处理方法和装置 |
CN104363285A (zh) * | 2014-11-18 | 2015-02-18 | 东方网力科技股份有限公司 | 一种网络通信程序生成方法及装置 |
CN105072130A (zh) * | 2015-08-26 | 2015-11-18 | 广州慧睿思通信息科技有限公司 | 一种asn.1解码器代码自动生成方法 |
-
2016
- 2016-10-31 CN CN201610933885.XA patent/CN106412086B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102043624A (zh) * | 2010-12-17 | 2011-05-04 | 青岛海信网络科技股份有限公司 | 中间件通讯接口自动编程方法及装置 |
CN102929682A (zh) * | 2012-12-06 | 2013-02-13 | 盛科网络(苏州)有限公司 | 自动扩展tcl语言的预处理方法和装置 |
CN104363285A (zh) * | 2014-11-18 | 2015-02-18 | 东方网力科技股份有限公司 | 一种网络通信程序生成方法及装置 |
CN105072130A (zh) * | 2015-08-26 | 2015-11-18 | 广州慧睿思通信息科技有限公司 | 一种asn.1解码器代码自动生成方法 |
Cited By (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108141464A (zh) * | 2017-03-15 | 2018-06-08 | 深圳中兴力维技术有限公司 | 一种通信协议解析代码自动生成方法及系统 |
WO2018165902A1 (zh) * | 2017-03-15 | 2018-09-20 | 深圳中兴力维技术有限公司 | 一种通信协议解析代码自动生成方法及系统 |
CN108141464B (zh) * | 2017-03-15 | 2019-04-05 | 深圳力维智联技术有限公司 | 一种通信协议解析代码自动生成方法及系统 |
CN107832046A (zh) * | 2017-10-31 | 2018-03-23 | 北京聆云信息技术有限公司 | 数据生成方法及装置 |
CN110300082A (zh) * | 2018-03-21 | 2019-10-01 | 腾讯科技(深圳)有限公司 | 一种接口生成方法、装置及存储介质 |
CN109445771A (zh) * | 2018-10-25 | 2019-03-08 | 北京和普威视科技股份有限公司 | 一种cs架构下网络层模块代码自动生成工具及方法 |
CN109445771B (zh) * | 2018-10-25 | 2021-06-15 | 北京和普威视科技股份有限公司 | 一种cs架构下网络层模块代码自动生成工具及方法 |
CN110166326A (zh) * | 2019-06-16 | 2019-08-23 | 北京中科海讯数字科技股份有限公司 | 通信协议数据实时自动跟踪系统 |
CN110166326B (zh) * | 2019-06-16 | 2021-07-06 | 北京中科海讯数字科技股份有限公司 | 通信协议数据实时自动跟踪系统 |
CN113536305B (zh) * | 2020-04-17 | 2022-09-09 | 武汉瓯越网视有限公司 | 检测采集行为的方法及装置 |
CN113536305A (zh) * | 2020-04-17 | 2021-10-22 | 武汉瓯越网视有限公司 | 检测采集行为的方法及装置 |
CN111736844A (zh) * | 2020-06-05 | 2020-10-02 | 国网电力科学研究院有限公司 | 一种数据库云服务标准接口及实现方法 |
CN111736844B (zh) * | 2020-06-05 | 2022-09-09 | 国网电力科学研究院有限公司 | 一种数据库云服务标准接口及实现方法 |
CN112714044A (zh) * | 2020-12-28 | 2021-04-27 | 北京恒光信息技术股份有限公司 | 基于形式语言协议的网络数据解析方法及装置 |
CN112714044B (zh) * | 2020-12-28 | 2022-06-07 | 北京恒光信息技术股份有限公司 | 基于形式语言协议的网络数据解析方法、装置及存储介质 |
CN113742294A (zh) * | 2021-08-23 | 2021-12-03 | 宜通世纪科技股份有限公司 | 一种asn.1-per信令消息解码方法、系统、装置及介质 |
CN114115833A (zh) * | 2022-01-25 | 2022-03-01 | 北京安帝科技有限公司 | 协议审计代码自动生成方法及装置 |
CN114697404A (zh) * | 2022-02-25 | 2022-07-01 | 中国航发控制系统研究所 | 数控系统的上下位机通讯协议生成方法、系统及存储介质 |
CN114938397A (zh) * | 2022-05-17 | 2022-08-23 | 浙江木链物联网科技有限公司 | 一种基于kaitai的高效率协议解包组包方法、系统和可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN106412086B (zh) | 2020-01-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106412086A (zh) | 一种利用协议描述文件自动生成通信代码的方法及系统 | |
Wolf et al. | Gobra: Modular specification and verification of Go programs | |
US7627861B2 (en) | Methods, systems, and computer program products for identifying computer program source code constructs | |
Völkel et al. | RDFReactor-from ontologies to programmatic data access | |
Fisher et al. | The next 700 data description languages | |
JP2012504826A (ja) | 拡張可能な構文を有するプログラミング言語 | |
CN102023856A (zh) | 根据用户的需求格式化输出及操作伺服端业务数据的方法 | |
US7216335B2 (en) | Operational semantics rules for governing evolution of processes and queries as processes | |
Ørbæk et al. | Trust in the λ-calculus | |
US7505988B2 (en) | XML validation processing | |
Fisher et al. | The next 700 data description languages | |
Duregård et al. | Embedded parser generators | |
JP4276168B2 (ja) | 資源についての並行、分散ネットワークの協調 | |
Castagna et al. | The design principles of the elixir type system | |
O’Connor et al. | Bringing Effortless Refinement of Data Layouts to C ogent | |
US20050234924A1 (en) | Automated patching of code for schema derived classes | |
CN115809442A (zh) | 一种反逆向代码混淆方法、装置、设备及可读存储介质 | |
Simonsen et al. | Pragmatics annotated coloured petri nets for protocol software generation and verification | |
US8650536B2 (en) | Modular server architecture | |
Van Tendeloo et al. | Modelverse specification | |
Jimenez et al. | A language for specifying type contracts in Erlang and its interaction with success typings | |
US10796017B1 (en) | Enterprise validation process (EVP) | |
Raab | A modular approach to configuration storage | |
Raman et al. | The classads language | |
US20050010577A1 (en) | Method and apparatus for generating Web content |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20240410 Address after: No. 1001, Yushan Road, Taierzhuang District, Zaozhuang City, Shandong Province, 277000 Patentee after: Zaozhuang Taifa New Energy Co.,Ltd. Country or region after: China Address before: 430000 East Lake Development Zone, Wuhan City, Hubei Province, No. 1 Software Park East Road 4.1 Phase B1 Building 11 Building Patentee before: WUHAN DOUYU NETWORK TECHNOLOGY Co.,Ltd. Country or region before: China |
|
TR01 | Transfer of patent right |