CN110166326A - 通信协议数据实时自动跟踪系统 - Google Patents
通信协议数据实时自动跟踪系统 Download PDFInfo
- Publication number
- CN110166326A CN110166326A CN201910518772.7A CN201910518772A CN110166326A CN 110166326 A CN110166326 A CN 110166326A CN 201910518772 A CN201910518772 A CN 201910518772A CN 110166326 A CN110166326 A CN 110166326A
- Authority
- CN
- China
- Prior art keywords
- protocol data
- file
- client
- real
- service
- 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
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L43/00—Arrangements for monitoring or testing data switching networks
- H04L43/18—Protocol analysers
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种通信协议数据实时自动跟踪系统,包括运行于客户端的协议数据追踪模块和运行于服务器端的协议数据整合模块,其中:客户端实时监控开发者的项目目录,对项目中的协议数据定义实时捕捉,并上传到服务器;服务器对各客户端上传的协议数据定义进行汇总与整合,形成各种协议数据类型、与使用这些协议数据的客户端IP地址的对应关系列表。本发明通过对结构体定义的自动抓取,并通过在服务器端的汇总、整合,使服务器端的通信组件不仅能认识更新后的协议数据,而且知道哪些客户端在使用这些协议数据,为实现推断式转发提供了支撑。
Description
技术领域
本公开涉及计算机网络通信领域,特别涉及一种通信协议数据实时自动跟踪系统。
背景技术
目前各种通信组件的缺陷主要是开发时需要写好用户所定义的协议数据,或是在用户使用通信组件时加以一定的规则约束,例如用专门的协议定义工具进行编辑,但该方式往往会限制数据类型的范围,其中结构体的定义往往只支持基本类型,若是有结构体嵌套复杂情况便不支持;另外,在开发过程中,协议数据修改是常见的情况,目前的通信组件只能是暂停,利用协议数据定义工具把新的协议数据定义重新生成,将新的生成文件进行更新,步骤较为繁琐,也降低了开发人员的开发效率;而且,作为通信组件的开发商,还需要同时提供协议定义工具的开发,增加了维护成本。
发明内容
本发明提供一种嵌入于整体通信框架中的通信协议数据实时自动跟踪系统,它是为自动化跟踪开发人员定义的协议数据设计的,能实时、自动追踪软件开发人员项目中结构体定义的更新,将结构体定义信息进行整合、解析,转为通信组件可识别的数据,同时,建立起这些结构体与使用每种结构体的客户端地址之间的对应关系,从而为通信组件正确解析、转发协议数据报文提供了支撑,避免了传统通信组件在使用时面临的开发效率低、环境部署繁琐等问题。
根据本公开,一种通信协议数据实时自动跟踪系统,采用C/S架构,包括运行于客户端的协议数据追踪模块和运行于服务器端的协议数据整合模块,其中:
所述协议数据追踪模块,实时监控开发者的项目目录,对项目中的协议数据定义实时捕捉,存储为数据库文件,并上传到服务器端;
所述协议数据整合模块,对来自各客户端所述协议数据追踪模块提取并上传的数据库文件进行汇总整合,形成以协议数据名称为标识、同时记载有上传该协议数据的客户端IP地址的数据库文件。
优选地,所述协议数据追踪模块包括目录监控服务、协议数据提取服务、文件传输服务,其中:
所述目录监控服务对用户指定项目目录下所有文件中定义的结构体数据的修改进行监控,并将修改触发的事件通知所述协议数据提取服务;
所述协议数据提取服务读取用户指定项目目录下所有文件,采用基于正则表达式的提取算法对文件中的结构体定义进行提取,存储为数据库文件;
所述文件传输服务,将所述协议数据提取服务形成的数据库文件发送到服务器端的所述协议数据整合模块,并通知其进行数据整合。
优选地,所述目录监控服务采用Qt5.9.2中的类QFileSystemWatcher以及该类的接口进行实时监控,同时采用递归算法对整个文件夹以及嵌套文件夹进行监控。
优选地,所述协议数据提取服务采用C++正则表达式对文件中的结构体定义进行提取。
优选地,所述协议数据提取服务采用的算法流程如下:
步骤1.从源码文件中读取文本,将文本内容全部读取到字符串中,然后对整个文件字符串进行以下处理;
步骤2.分别利用正则表达式,将匹配到的多行注释文本、单行注释文本以及C++风格结构体中的函数体替换为空;
步骤3.将换行符和回车符替换为空;
步骤4.利用正则表达式提取C和C++两种风格的结构体;
步骤5.利用正则表达式提取结构体内容,提取对应的元素类型,变量名称。
优选地,所述协议数据追踪模块对追踪到的协议数据采用以所在客户端的IP地址为后缀的命名方式。
优选地,所述协议数据追踪模块在追踪到协议数据后,采用嵌入式数据库Sqlite3进行存储,存储到对应的DB文件中,数据库访问接口底层调用官方的sqlite3库进行二次封装。
优选地,所述协议数据追踪模块为用户提供设置界面,用于设置自己开发项目的项目目录、开发的系统的名称、开发的系统的分系统或系统的某一个客户端,以及服务器端的IP地址。
优选地,所述协议数据整合模块由文件传输服务、数据整合服务组成,其中:
所述文件传输服务保持与多个客户端的连接,接收客户端所述协议数据追踪模块上传的数据库文件,以及来自客户端的通知或提醒;
所述数据整合服务对接收到的各客户端上传的数据库文件进行解析与整合,形成以协议数据名称为标识、同时记载有上传该协议数据的客户端IP地址的数据库文件。
优选地,运行于客户端的所述协议数据追踪模块和运行于服务器端的所述协议数据整合模块通过内存通信机制与分别运行在客户端和服务器端的通信组件进行通信。
本公开通过对指定目录下文件中所包含的结构体信息的更改的监控,触发自动抓取文件中更新后的结构体信息,进而通过对来自各客户端的结构体数据信息的汇总、整合,建立起结构体和上传这些结构体的客户端IP地址之间的对应关系,从而使服务器端的通信组件不仅能认识更新后的协议数据,而且知道哪些客户端在使用这些协议数据,实现了通信系统对协议数据的自动化追踪。与现有技术相比,本公开具有如下优点:(1)采用Qt5.9.2类库中的目录监控接口,结合信号槽机制,能够实时捕捉监控目录下的文件修改情况,保证协议数据追踪的实时性;(2)自动进行协议数据的提取与整合,使各客户端的协议数据与服务器端协议数据同步,保证通信系统的正常运行,用户开发项目时只需要配置所开发的项目目录,而不用自己进行繁琐的协议数据定义,即可让通信组件能够转发自己的项目中的结构体;(3)算法实现上针对C语言和C++语言方面对结构体定义的差别进行正则表达式的详细设计,保证协议数据追踪的准确性;(4)软件可监控用户指定目录和文件变化,可以监控到文件级别,文件类型和目录都可以人工进行配置,C、C++、H文件都能够支持;(5)支持通过网络、内存交换等多种通信方式进行数据交换,开放了一定的应用程序控制接口,可支持二次开发与扩展。
附图说明
通过结合附图对本公开示例性实施例进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施例方式中,相同的参考标号通常代表相同部件。
图1示出了本公开示例性实施例的系统组成示意图;
图2示出了根据示例性实施例的协议数据追踪模块的工作流程示意图;
图3示出了协议数据追踪模块中的协议数据提取服务提取算法流程示意图
图4示出了协议数据追踪模块追踪协议数据并入库的软件界面;
图5示出了协议数据追踪模块提取结构体的信息提取情况(为了方便展示,将提取的信息同时存储到xml文件中);
图6示出了提取的协议数据结果并sqlite3数据库中的存储情况;
图7示出了协议数据整合模块工作流程图。
具体实施方式
下面将参照附图更详细地描述本公开的优选实施例。虽然附图中显示了本公开的优选实施例,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
示例性实施例是为了重点解决用户项目开发阶段经常可能出现的通信协议变更、或接收方IP地址或端口变更而导致用户在使用现有通信转发系统时不得不随之重新进行配置的繁琐问题而设计的,用于为实现一种能够自动适应用户协议数据的更改、无需指定接收方IP地址的通信转发系统提供支撑。
附图1中给出了本发明示例性实施例的系统组成示意图。
如图所示,本公开所述通信协议数据实时自动跟踪系统,采用C/S架构,包括运行于客户端的协议数据追踪模块和运行于服务器端的协议数据整合模块,其中,协议数据追踪模块用于实时监控开发者的项目目录,对项目中的协议数据定义实时捕捉,存储为数据库文件,并上传到服务器端;协议数据整合模块对来自各客户端协议数据追踪模块提取并上传的数据库文件进行汇总整合,形成以协议数据名称为标识、同时记载有上传各协议数据的客户端IP地址的数据库文件。
可见,本公开所述系统主要是为用户项目开发阶段服务的。
(1)协议数据追踪模块
如附图1所示,示例性实施例中的协议数据追踪模块主要包括目录监控服务、协议数据提取服务和文件传输服务。其中,目录监控服务对用户指定项目目录下所有文件中定义的结构体数据的修改进行监控,并将修改触发的事件通知所述协议数据提取服务;
协议数据提取服务读取用户指定项目目录下所有文件,采用基于正则表达式的提取算法对文件中的结构体定义进行提取,存储为数据库文件;
文件传输服务,将所述协议数据提取服务形成的数据库文件发送到服务器端的所述协议数据整合模块,并通知其进行数据整合。该系统客户端与服务器端之间优选采用数据通信的方式,采用一套固定的报文协议,专门用来通知对方数据抓取和整合状态。
附图2中给出了本示例性实施例中客户端协议数据追踪模块的工作流程示意图。
图中可见,本实施例所述系统客户端启动时与运行在客户端的通信组件关联启动,这样做的目的是能够与通信组件进行进程间通信,从而进行数据转发。启动后目录配置完成后,目录监控服务便开始监控,首先会将该目录下的文件提取一遍,然后用户在修改其中的文件并保存时,触发服务的一次响应,此时会重新扫描一遍目录结构,并对新的目录结构下的文件进行一次新的结构体提取。提取完成后由文件传输服务将新的文件上传至服务器。
作为优选方案,本实施例中所述目录监控服务采用Qt5.9.2中的类QFileSystemWatcher以及该类的接口进行实时监控,同时采用递归算法支持对整个文件夹以及嵌套文件夹进行监控。
采用递归算法对文件子目录多重监控的关键代码示例如下:
作为优选方案,本实施例中协议数据提取服务采用C++正则表达式对文件中的结构体定义进行提取。
优选的提取算法流程如下:
步骤1.从源码文件中读取文本,将文本内容全部读取到字符串中,然后对整个文件字符串进行以下处理;
步骤2.分别利用正则表达式,将匹配到的多行注释文本、单行注释文本以及C++风格结构体中的函数体替换为空;
步骤3.将换行符和回车符替换为空;
步骤4.利用正则表达式提取C和C++两种风格的结构体;
步骤5.利用正则表达式提取结构体内容,提取对应的元素类型,变量名称。
作为进一步优化方案,本实施例基于Qt5.9.2开发设计,引入了Qt类库中的QRegularExpression类实现了与C++以及Perl兼容的正则表达式,并有了很大的改进。在QRegularExpression中,一个正则表达式由两部分构成:一个模式字符串和一组模式选项,模式选项用来更改模式字符串的含义。QRegularExpression::PatternOption枚举类型进行定义,模式选项如下表所示:
表11模式选项
结合附图3,对示例性实施例中协议数据提取算法的流程进一步解释如下:
图中可以看出该算法的设计是以文件读取开始,将含有协议数据定义的整个文件读入内存,并将文件内容序列化为字符串,从而转为可以字符串操作的格式。
第二步将序列化字符串中的多行注释、单行注释删除,考虑到被注释的结构体定义代码已经失去了作用,所以先删除注释的代码,由于多行注释包含单行注释的情况,所以先删除多行注释再删除单行注释;其中,匹配多行注释所用的正则表达式为:\\/\\*[\\s\\ S]*?\\*\\/,匹配单行注释用的正则表达式://[\\s\\S]*?\\r\\n。
第三步删除序列化字符串中的特殊符号,如换行符,回车符等,这些符号在序列化后的内容中是可以看见的,而在正常情况下是看不见这些符号的,所以要删除这些符号。
第四步删除序列化字符串中的结构体函数(如果存在),在C++编程语言中,结构体的定义与类的定义类似,可以含有一个构造函数,用来初始化结构体的元素,而这些元素对于追踪结构体的信息描述而言并不重要,因此如果存在构造函数,该操作将删除序列化字符串中的函数;匹配函数体用的正则表达式为:\\w+\\s*\\([\\s\\S]*?\\)\\s*\\{[\\s\\S]*?\\}。
第五步,提取所有的结构体的名字、别名和结构体总体内容(子串)。匹配结构体用的正则表达式为:
\\s*(\\btypedef\\b\\s+|\\s*)\\bstruct\\b(\\s*\\w+|\\s*)[\\s\\S]*?{\\ s*([\\s\\S]*?)\\s*}([\\s\\S]*?),将匹配到的结构体名字保存,匹配到的结构体内容保存,做进一步匹配:考虑到结构体在定义时具有不同的形式,正则表达式的typedef关键词也是不绝对匹配,struct后的结构体名称也是不绝对匹配,最后{}后面的结构体名字也为不绝对匹配,因此在提取过程中,会对提取得到的结果进行分析,对提取的名称进行优先分级,首选struct关键词后的名字,若没有,采用最后的结构体别名。
该操作实际上将结构体的大致提取为名字+大概内容,该操作重点解决了C语言和C++语言的差异性问题。可支持的定义格式如下:
表10结构体定义样式
第六步,针对第五步提取的结构体名字进行遍历并将每一个结构体的详细内容进行提取,该操作要对基本的数据类型以及不同平台下的数据类型有所包括,同时,指针类型、数组类型、嵌套结构体也都有特殊的处理,同时为了便于扩展和软件应用的灵活性,实现配置文件来适用不同的平台环境。C\C++平台目前支持的基本类型有int、float、short、double、char、unsigned char、WORD、unsigned short、unsigned int、unsigned float、unsigned double、BYTE以及对应的指针类型、数组类型,二维数组。
然后即可将提取到的结构体存储到DB文件对应的表中。
附图4是示例性实施例中的协议数据追踪模块追踪协议数据并入库软件界面。
附图5中示例性地给出了协议数据追踪模块提取结构体的信息提取情况,为了方便展示,将提取的信息同时存储到xml文件中。图中可以看出在NAV结构体定义中,提取到了NAV的结构体名字外,别名为空,结构体的指针名字也提取到,在NAV的结构体内容方面,单个元素用1x1表示,若是数组用1x2、1x3…表示,若是二维数组,则是mxn的形式,如图所示,可以看出结构体中有一个char类型的cType[3][30]的二维数组。
作为优选方案,本实施例中,协议数据追踪模块对追踪到的协议数据采用以所在客户端的IP地址为后缀的命名方式。
作为优选方案,本实施例中,协议数据追踪模块在追踪到协议数据后,采用嵌入式数据库Sqlite3进行存储,存储到对应的DB文件中,数据库访问接口底层调用官方的sqlite3库进行二次封装。官方给出的sqlite3源码编译的是底层的sqlite3.dll,直接使用不方便,所以要针对系统进行接口封装,生成便于系统调用的动态链接库。示例性封装接口函数及协议数据存储格式如下。其中,表1为用户与协议数据追踪模块通信时的接口函数,表2为用户启动客户端协议数据追踪模块时需要配置的信息。
表1协议数据服务通信接口函数列表
表2客户端配置信息表结构
表3客户端文件列表信息表结构
表4客户端结构体表结构
表5客户端结构体元素表结构
附图6是提取的协议数据结果在sqlite3数据库中的存储情况。
SQlite数据库由于简单、灵活、轻量、开源,提高了数据的结构化程度,并且提高大数据的处理能力(SQLite最高支持2PB大小的数据)。但是通常情况下,直接使用SQL语句进行数据插入的效率非常低。而本公开需要高速的数据读写方式来处理追踪到的结构体信息,因此,作为优选方案,本实施例中的SQLite接口采用以下方法来提高效率:
常规插入数据语句:
for(int i=0;i<nCount;++i)
{
Std::stringstream ssm;
Ssm<<”insert into t1 values(”<<i<<”,”<<i*2<<”,”<<i/2<<”,”<<i*i<<”)”;
Sqlite3_exec(db,ssm.str().c_str(),0,0,0);
}
①显示开启事务。所谓“事务”就是一组SQL命令,这些命令要么一起执行,要么都不被执行。在SQLite中,每调用一次sqlite3_exec()函数,就会隐式地开启了一个事务,如果插入一条数据,就调用该函数一次,事务就会被反复地开启、关闭,会增大IO量。如果在插入数据前显示开启事务,插入后再一起提交,则会大大提高IO效率,进而加快数据插入速度。开启事务代码如下:
Sqlite3_exec(db,“begin;”,0,0,0);
for(int i=0;i<nCount;++i)
{
Std::stringstream ssm;
Ssm<<”insert into t1 values(”<<i<<”,”<<i*2<<”,”<<i/2<<”,”<<i*i<<”)”;
Sqlite3_exec(db,ssm.str().c_str(),0,0,0);
}
Sqlite3_exec(db,“commit;”,0,0,0);
②写同步。由于SQLite中,数据库配置的参数都有编译指示(pragma)来实现的,而其中synchronous选项有三种可选状态,分别是full、normal、off。Full写入速度最慢,但保证数据是安全的,不受断电、系统崩溃等影响,而off可以加速数据库的一些操作,如果系统崩溃或断电,则数据可能会损毁。
SQLite3中,该选项的默认值是full,需要将其改为off,执行语句如下:
Sqlite3_exec(db,”pragma synchronous=off;”,0,0,0);
③执行准备。SQLite执行SQL语句的时候,有两种方式:一种是使用前文提到的sqlite3_exec();该函数直接调用包含SQL语句的字符串;另一种方法就是“执行准备”,即先将SQL语句编译好,然后一步一步地执行。如果采用前者,就算开启了事务,SQLite仍然要循环对每一句SQL语句进行“词法分析”和“语法分析”,因此本实施例中采用后者。主要分为三大步骤:a、调用函数sqlite3_prepare_v2();并且声明一个指向sqlite3_stmt对象的指针,该函数对参数化的SQL语句zSql进行编译,将编译后的状态放入ppStmt中。b、调用函数sqlite3_step(),该函数为执行一步,如果函数函数返回SQLite_ROW则说明仍在继续执行,否则说明已经执行完所有操作。c、调用函数sqlite3_finalize(),关闭语句。执行代码如下:
进一步的,sqlite数据库访问接口,基于SQLite官网提供的源码,在VS平台下自行编译生成sqlite3.dll库,然而该库中的函数都为底层函数,在软件项目中并不易于使用,因此在Qt5.9.2平台下静态引用sqlite3.h,sqlite3.lib,sqlite3.dll进行二次封装,生成动态链接库MySqlite3.dll,方便应用程序的使用。
在得到存储结构体信息的DB文件后,客户端需要将发送到服务器,由协议数据整合模块进行整合,本实施例中协议数据追踪模块的文件传输服务采用TCP协议与服务器端建立连接,每一次协议数据追踪并写入DB文件成功后,触发文件传输信号,传输一次DB文件。
本实施例中,协议数据追踪模块为用户提供了设置界面,用于设置自己开发项目的项目目录、开发的系统的名称、开发的系统的分系统或系统的某一个客户端(相当于设置自己在所开发系统中的身份或角色),以及服务器端的IP地址(用于追踪到的协议数据文件传输)。
在这里,协议数据追踪模块需要与通信组件的客户端形成绑定关系,通信组件客户端需要将自己的窗口句柄告知该模块,以便接收该模块的内存通信消息。本实施例采用的方法为:基于本公开为嵌入式服务软件,利用Qt类库中提供的WinId接口,在通信组件客户端配置文件config.ini中将本次运行的句柄作为winId的值写入,然后协议数据追踪模块在通信组件客户端目录下,读取config.ini的内容,通过getHWNDfromWinId(const int&winid)函数将其中的winId值转为窗口句柄即可。
在获取通信组件的窗口句柄后,两者之间的通信采用进程间通信中的WM_COPYDATA消息方式。使用发送WM_COPYDATA消息方式,该方式属于windows消息的一种,通过调用SendMessage函数发送消息到指定窗口;发送内容主要包括CopyData为COPYDATASTRUCT结构类型,该结构定义如下:
typedef struct tagCOPYDATASTRUCT{
DWORD dwData;
DWORD cbData;
PVOID lpData;
}COPYDATASTRUCT,*PCOPYDATASTRUCT;
发送函数实现:
该函数封装在HX.dll中,由开发用户程序调用,如果通信组件客户端窗口名字为hx_send,用户传入结构体并将数据发送给hx_send窗口。当然该软件并不是采用窗口名字,而是通过窗口句柄来得到。
而接收端的程序需要实现接收函数,若是Qt程序,需要重写nativeEvent函数,示例如下:
如果通信组件为MFC程序,则需要重写COPYDATA函数示例代码如下:
(2)协议数据整合模块
如附图1所示,示例性实施例中协议数据整合模块包括文件传输服务、数据整合服务,其中:
文件传输服务保持与多个客户端的连接,接收客户端所述协议数据追踪模块上传的数据库文件,以及来自客户端的通知或提醒。
所述数据整合服务对接收到的各客户端上传的数据库文件进行解析与整合,形成以协议数据名称为标识、同时记载有上传该协议数据的客户端IP地址的数据库文件。形成该数据库文件后,可以直接发送给服务器端的通信组件供其使用,也可以通过消息通知其到数据库中读取。
示例性工作流程如附图7所示。
该模块的文件传输服务通过TCP协议接收DB文件到指定的目录下。为了保证文件接收与数据整合不冲突,该模块设有一个缓冲目录,而数据整合服务对应的整合文件放在Monitor目录。文件传输服务接收的文件存放在缓冲目录,同时开启一个线程判断数据整合服务的状态,如果在整合状态,不向Monitor目录转移上传来的文件,如果不在整合状态,则将已经接收的文件转移到Monitor目录下对应的子目录中,并通知数据整合服务开启整合任务。
与协议数据追踪模块同样,该模块的数据整合服务基于sqlite3库进行二次封装,整合后的函数接口示例如下:
表6服务器端协议数据服务通信接口函数列表
表7服务器端配置信息表结构
表8服务器端结构体表结构
表9服务器端结构体元素表结构
该模块的数据整合服务为了能够将各客户端上传而来的DB文件进行整合,首先要区分的是不同的客户端的差异性,因而在客户端追踪协议数据时,采用IP后缀的命名方式,在协议数据整合时,协议数据整合服务能够将不同的结构体按照不同的IP形成一定的对应关系,命名为IP列表。
示例性实施例中采用了数据提交服务将这个IP列表通过内存通信方式发给通信组件。这种设计需要通信组件能够支持转发缓冲队列,能够对转发的结构体报文进行缓冲存储操作,防止整合服务在整合过程中,有新的文件传来,导致冲突,同时有IP列表的缓存队列。
另外,该模块要实现与协议数据追踪模块之间的文件传输,还需建立一些其他的同步操作,例如,协议数据需要知道目前开发用户的开发的项目名称目录,因此该软件设计几种通信报文,用于查询所有项目名称、返回查询结果、接收创建目录(即服务端端创建的项目目录)、返回目录查询结果、整合状态等。
根据示例性实施例,本公开所提供的通信协议数据实时自动跟踪系统,采用Qt5.9.2类库中的目录监控接口,结合信号槽机制,能够实时捕捉监控目录下的文件修改情况,保证协议数据自动追踪的实时性;另外,自动进行数据整合,实现了各客户端的协议数据与服务器端协议数据同步,保证系统的正常运行;用户开发项目时只需要配置所开发的项目目录,只需关注本项目的配置目录,而不用自己进行繁琐的协议数据定义,即可让通信组件能够转发自己的项目中的结构体。算法实现上针对C语言和C++语言方面对结构体定义的差别进行正则表达式的详细设计,保证协议数据追踪的准确性;可监控该目录和文件变化,可以监控到文件级别,文件类型和目录都可以人工进行配置,C、C++、H文件都能够支持。同时该软件支持通过网络、内存交换、报文传输三种通信方式进行数据交换,开放了一定的应用程序控制接口,可支持二次开发与扩展。
上述技术方案只是本发明的一种实施例,对于本领域内的技术人员而言,在本发明公开了应用方法和原理的基础上,很容易做出各种类型的改进或变形,而不仅限于本发明上述具体实施例所描述的方法,因此前面描述的方式只是优选的,而并不具有限制性的意义。
Claims (10)
1.一种通信协议数据实时自动跟踪系统,采用C/S架构,包括运行于客户端的协议数据追踪模块和运行于服务器端的协议数据整合模块,其中:
所述协议数据追踪模块,实时监控开发者的项目目录,对项目中的协议数据定义实时捕捉,存储为数据库文件,并上传到服务器端;
所述协议数据整合模块,对来自各客户端所述协议数据追踪模块提取并上传的数据库文件进行汇总整合,形成以协议数据名称为标识、同时记载有上传该协议数据的客户端IP地址的数据库文件。
2.根据权利要求1所述的通信协议数据实时自动跟踪系统,其中所述协议数据追踪模块包括目录监控服务、协议数据提取服务、文件传输服务,其中
所述目录监控服务对用户指定项目目录下所有文件中定义的结构体数据的修改进行监控,并将修改触发的事件通知所述协议数据提取服务;
所述协议数据提取服务读取用户指定项目目录下所有文件,采用基于正则表达式的提取算法对文件中的结构体定义进行提取,存储为数据库文件;
所述文件传输服务,将所述协议数据提取服务形成的数据库文件发送到服务器端的所述协议数据整合模块,并通知其进行数据整合。
3.根据权利要求2所述的通信协议数据实时自动跟踪系统,所述目录监控服务采用Qt5.9.2中的类QFileSystemWatcher以及该类的接口进行实时监控,同时采用递归算法对整个文件夹以及嵌套文件夹进行监控。
4.根据权利要求2所述的通信协议数据实时自动跟踪系统,所述协议数据提取服务采用C++正则表达式对文件中的结构体定义进行提取。
5.根据权利要求4所述的通信协议数据实时自动跟踪系统,所述协议数据提取服务采用的算法流程如下:
步骤1.从源码文件中读取文本,将文本内容全部读取到字符串中,然后对整个文件字符串进行以下处理;
步骤2.分别利用正则表达式,将匹配到的多行注释文本、单行注释文本以及C++风格结构体中的函数体替换为空;
步骤3.将换行符和回车符替换为空;
步骤4.利用正则表达式提取C和C++两种风格的结构体;
步骤5.利用正则表达式提取结构体内容,提取对应的元素类型,变量名称。
6.根据权利要求1所述的通信协议数据实时自动跟踪系统,所述协议数据追踪模块对追踪到的协议数据采用以所在客户端的IP地址为后缀的命名方式。
7.根据权利要求1所述的通信协议数据实时自动跟踪系统,所述协议数据追踪模块在追踪到协议数据后,采用嵌入式数据库Sqlite3进行存储,存储到对应的DB文件中,数据库访问接口底层调用官方的sqlite3库进行二次封装。
8.根据权利要求1所述的通信协议数据实时自动跟踪系统,所述协议数据追踪模块为用户提供设置界面,用于设置自己开发项目的项目目录、开发的系统的名称、开发的系统的分系统或系统的某一个客户端,以及服务器端的IP地址。
9.根据权利要求1所述的通信协议数据实时自动跟踪系统,所述协议数据整合模块由文件传输服务、数据整合服务组成,其中
所述文件传输服务保持与多个客户端的连接,接收客户端所述协议数据追踪模块上传的数据库文件,以及来自客户端的通知或提醒;
所述数据整合服务对接收到的各客户端上传的数据库文件进行解析与整合,形成以协议数据名称为标识、同时记载有上传该协议数据的客户端IP地址的数据库文件。
10.根据权利要求1所述的通信协议数据实时自动跟踪系统,运行于客户端的所述协议数据追踪模块和运行于服务器端的所述协议数据整合模块通过内存通信机制与分别运行在客户端和服务器端的通信组件进行通信。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910518772.7A CN110166326B (zh) | 2019-06-16 | 2019-06-16 | 通信协议数据实时自动跟踪系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910518772.7A CN110166326B (zh) | 2019-06-16 | 2019-06-16 | 通信协议数据实时自动跟踪系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110166326A true CN110166326A (zh) | 2019-08-23 |
CN110166326B CN110166326B (zh) | 2021-07-06 |
Family
ID=67625889
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910518772.7A Active CN110166326B (zh) | 2019-06-16 | 2019-06-16 | 通信协议数据实时自动跟踪系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110166326B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111783401A (zh) * | 2020-07-23 | 2020-10-16 | 网易(杭州)网络有限公司 | 字符串处理方法及装置、计算机存储介质、电子设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101287257A (zh) * | 2007-04-09 | 2008-10-15 | 华为技术有限公司 | 一种业务跟踪方法、系统及服务器 |
CN105989046A (zh) * | 2015-02-03 | 2016-10-05 | 中国人寿保险股份有限公司 | 网站显示方法及系统、以及用户终端 |
CN106412086A (zh) * | 2016-10-31 | 2017-02-15 | 武汉斗鱼网络科技有限公司 | 一种利用协议描述文件自动生成通信代码的方法及系统 |
CN106533849A (zh) * | 2016-10-13 | 2017-03-22 | 上海斐讯数据通信技术有限公司 | 一种路由器统一接入设备名称的系统及方法 |
CN109445771A (zh) * | 2018-10-25 | 2019-03-08 | 北京和普威视科技股份有限公司 | 一种cs架构下网络层模块代码自动生成工具及方法 |
-
2019
- 2019-06-16 CN CN201910518772.7A patent/CN110166326B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101287257A (zh) * | 2007-04-09 | 2008-10-15 | 华为技术有限公司 | 一种业务跟踪方法、系统及服务器 |
CN105989046A (zh) * | 2015-02-03 | 2016-10-05 | 中国人寿保险股份有限公司 | 网站显示方法及系统、以及用户终端 |
CN106533849A (zh) * | 2016-10-13 | 2017-03-22 | 上海斐讯数据通信技术有限公司 | 一种路由器统一接入设备名称的系统及方法 |
CN106412086A (zh) * | 2016-10-31 | 2017-02-15 | 武汉斗鱼网络科技有限公司 | 一种利用协议描述文件自动生成通信代码的方法及系统 |
CN109445771A (zh) * | 2018-10-25 | 2019-03-08 | 北京和普威视科技股份有限公司 | 一种cs架构下网络层模块代码自动生成工具及方法 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111783401A (zh) * | 2020-07-23 | 2020-10-16 | 网易(杭州)网络有限公司 | 字符串处理方法及装置、计算机存储介质、电子设备 |
CN111783401B (zh) * | 2020-07-23 | 2024-03-15 | 网易(杭州)网络有限公司 | 字符串处理方法及装置、计算机存储介质、电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN110166326B (zh) | 2021-07-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP2616965B1 (en) | Support for a parameterized query/view in complex event processing | |
US6925476B1 (en) | Updating application data including adding first change log to aggreagate change log comprising summary of changes | |
US7783601B2 (en) | Replicating and sharing data between heterogeneous data systems | |
US7668849B1 (en) | Method and system for processing structured data and unstructured data | |
US6199081B1 (en) | Automatic tagging of documents and exclusion by content | |
US6606649B1 (en) | Application programming interface functions for supporting an improved message store for hand-held computers | |
US7089560B1 (en) | Architecture for building web applications | |
US9424003B1 (en) | Schema-less system output object parser and code generator | |
Bergel et al. | Deep Into Pharo | |
CN100438435C (zh) | 一种限制浏览器访问网络地址的方法 | |
US20040002982A1 (en) | Dynamic metabase store | |
CN108932122A (zh) | 接口文档生成方法、装置、计算机设备和存储介质 | |
WO2003009517A2 (en) | Generate customized xml mapping conversion code | |
KR20060095448A (ko) | 데이터베이스 내부에 표현된 파일 시스템 | |
CN110502212A (zh) | 一种面向多语言的高并发在线开发支撑方法 | |
CN112231407B (zh) | PostgreSQL数据库的DDL同步方法、装置、设备和介质 | |
JP2012128853A (ja) | Xmlドキュメントを処理するためのシステム及び方法 | |
CN108509199A (zh) | 自动生成中文注释的方法、装置、设备及存储介质 | |
CN110347954B (zh) | 面向复杂Web应用的服务化方法 | |
CN114036119A (zh) | 一种基于kettle和数据库日志的数据同步方法 | |
US8600990B2 (en) | Interacting methods of data extraction | |
CN110334302B (zh) | 复杂Web应用前端运行时分析方法 | |
KR101224684B1 (ko) | 패키징 모델의 컴포넌트와 패키지의 물리적 표현의 피처간의 매핑 방법 및 시스템 | |
CN110166326A (zh) | 通信协议数据实时自动跟踪系统 | |
CN115033569A (zh) | 一种自定义遥感影像元数据入库方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |