CN110519212B - 一种基于匿名推断的通信转发系统 - Google Patents
一种基于匿名推断的通信转发系统 Download PDFInfo
- Publication number
- CN110519212B CN110519212B CN201910518975.6A CN201910518975A CN110519212B CN 110519212 B CN110519212 B CN 110519212B CN 201910518975 A CN201910518975 A CN 201910518975A CN 110519212 B CN110519212 B CN 110519212B
- Authority
- CN
- China
- Prior art keywords
- client
- server
- data
- node
- forwarding
- 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.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/04—Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks
- H04L63/0407—Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks wherein the identity of one or more communicating identities is hidden
- H04L63/0421—Anonymous communication, i.e. the party's identifiers are hidden from the other party or parties, e.g. using an anonymizer
-
- 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/01—Protocols
-
- 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/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/164—Adaptation or special uses of UDP protocol
-
- 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/22—Parsing or analysis of headers
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Computer And Data Communications (AREA)
Abstract
一种基于匿名推断的通信转发系统,包括通信转发客户端和服务器端,其中:客户端实时监控用户指定目录下所有源文件中结构体定义的变动,并自动抓取其中的结构体定义信息,发送给服务器端;服务器端对各个客户端发来的结构体定义信息进行整合,形成记载有各种结构体定义与使用每种结构体的客户端IP地址的列表,在之后收到客户端发送的协议数据报文时,解析出其中包含的结构体信息,并通过查询上述列表,推断出接收方IP,进而将数据转发至接收方。本发明通过对源文件中结构体定义信息变动的实时监控和数据抓取,保证了通信服务器可以自动获取各个节点的结构体定义,并推断出数传报文的接收方,实现了匿名通信。
Description
技术领域
本公开涉及计算机通信领域,特别涉及一种基于匿名推断的通信转发系统。
背景技术
目前使用的通信转发系统或组件,首先用户往往需要进行复杂繁琐的配置过程,包括通过界面可视化工具手动指明发送方与接收方的方式,或者通过修改配置文件、修改源代码等指明发送方接收方端口的方式,以通知通信转发系统或组件报文数据的接收方,且在开发过程中,通信协议或报文更新后需要重新按上述方法配置方可继续使用,否则通信转发系统或组件无法解析出报文数据接收方。而在用户进行项目开发的过程中,通信协议的更改或收发双方IP地址的更改都是不可避免的,这种繁琐的配置过程降低了通信转发系统的易用性。
其次在使用UDP方式完成用户数据转发过程中会存在丢失数据包的现象,传统通信转发组件存在丢失通信数据包后不作为的问题,致使数据传输可靠性得不到保障。
发明内容
本公开提供的基于匿名推断的通信转发系统,采用C/S架构,通过其客户端对用户指定项目目录下源文件中包含的结构体定义变动的实时监控,以及对结构体定义的自动抓取,保证了服务器端可以自动获取各个节点定义的结构体信息,并据此推断出各种数据报文的接收方,从而使通信转发系统在实现现有的数据转发功能的同时,能够实现自主推断数据接收方的功能,简化了用户的配置流程,实现了匿名通信。另外,通过多通道模式转发数据,提高了数据传输可靠性。具体方案如下:
根据本公开,一种基于匿名推断的通信转发系统,包括通信转发客户端和服务器端,其中:所述客户端实时监控用户指定目录下所有源文件中结构体定义的变动,并自动抓取其中的结构体定义信息,发送给所述服务器端;所述服务器端对各个客户端发来的结构体定义信息进行整合,形成各种结构体定义与使用每种结构体的客户端IP地址之间的对应关系列表,在之后收到客户端发送的协议数据报文时,解析出其中包含的结构体信息,并通过查询上述对应关系列表,推断出所有接收方IP,进而依据推断结果将数据转发到接收方。
优选地,所述客户端使用Qt标准类库中的QFileSystemWatcher接口中的目录文件监控信号QFileSystemWatcher::directoryChanged和 QFileSystemWatcher::fileChanged监控用户指定目录下源文件中结构体定义的变动,并触发相应的槽函数遍历整个文件目录以进行结构体定义信息的抓取。
优选地,所述客户端利用Qt标准类库的QRegularExpression与QRegularExpressionMatch接口,基于C++正则表达式对扫描的文件内容进行匹配,抓取其中的结构体定义。
优选地,所述客户端对来自各源文件的结构体定义信息进行整合并按照一定格式存储到数据库的DB文件中。
优选地,所述客户端通过TCP网络通信的方式将抓取到的结构体定义信息发送到所述服务器端。
优选地,所述客户端以动态链接库形式为用户提供调用接口,接收用户传入的需要传送的协议数据报文,并对传入的协议数据报文进行序列化,转发给所述服务器端;同时,所述客户端采用类反射技术,将从服务器端接收而来的协议数据报文进行反序列化,反射成为结构体指针提供给用户。
优选地,所述服务器端包括:
节点数据收集与整合服务:接收各客户端发来的存有结构体定义信息的文件,按照结构体名称为唯一标识进行分组整合,形成记载有各种结构体定义以及使用每种结构体的客户端IP地址的列表文件;
目标节点推断服务:对所述客户端发来的协议数据报文进行解析,找出其中包含的结构体类型,然后到所述节点数据收集与整合服务形成的列表文件中查找使用此结构体的节点,推断出目标节点,将目标节点信息发送给节点数据接收与转发服务;
节点数据接收与转发服务:接收来自客户端的协议数据报文,缓存到系统中,然后根据所述目标节点推断服务的推断结果,转发给接收方;
系统异步并行收发与监视服务:实现系统的各个进程之间的信息交互,以及系统各服务及模块的引导、启动和状态监控。
优选地,所述节点数据接收与转发服务中的转发实现途径包括:
服务器主动广播方式:所述服务器端收到发送方的协议数据报文后,按照目标节点推断的结果,将接收方的相关信息拼接在要转发的数据前,然后通过 UDP广播的方式转发出去;
客户端主动抓取方式:各节点的所述通信转发客户端与服务器端之间通过 UDP绑定后,主动高频次向服务器询问是否有本节点数据,当服务器端接收到来自接收方的询问时,查询本地是否有该接收方的数据,若有则通过新的端口发送;
系统通过接收方的反馈信息及发送方的发送记录,协调这两种方式的使用,避免重复发送。
优选地,所述服务器端各个服务之间的通信利用Windows系统的消息机制实现,各个进程的线程之间的通信利用Qt信号槽机制实现。
优选地,所述异步并行收发与监视服务监测到其他服务出现异常时,记录问题日志并根据心跳状态监测自动重启发生异常的服务。
本公开通过对源文件中结构体定义信息变动的实时监控和数据抓取,保证了通信服务器可以自动获取各个节点的结构体定义,并据此推断出数传报文的接收方。与现有技术相比,本公开的优点在于:能够完全接管用户系统的通信流程,无需再指明收发双方地址,简化了用户的配置过程,尤其是在项目开发过程中因为通信协议更改或收发地址更改而重新配置的繁琐过程,节省了客户代码量,使用户系统能够聚焦在业务实现上,降低研发及学习成本;提高了UDP 通信的可靠性和实时性;本公开所述系统中的各个组成部分以服务与组件的形式进行设计开发,各部分功能相对独立,形成松耦合的程序结构,便于后期功能扩展及复用。
附图说明
通过结合附图对本公开示例性实施例进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施例方式中,相同的参考标号通常代表相同部件。
图1示出了示例性实施例的基于匿名推断的通信转发系统组成示意图;
图2示出了示例性实施例的通信转发系统对节点结构体定义变化的监控、抓取和存储过程示意图;
图3示出了示例性实施例的目标节点推断服务流程图;
图4示出了示例性实施例中服务器通过推断和广播方式转发用户数据的过程;
图5示出了示例性实施例中服务器通过推断和主动抓取方式转发用户数据的过程;
图6示出了示例性实施例的基于匿名推断的通信转发系统总体工作流程图。
具体实施方式
下面将参照附图更详细地描述本公开的优选实施例。虽然附图中显示了本公开的优选实施例,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
如附图1所示,在本公开所述基于匿名推断的通信转发系统的示例性实施例中,系统组成包括通信转发客户端和服务器端,其中:
所述客户端实时监控用户指定目录下所有源文件中结构体定义的变动,并自动抓取其中的结构体定义信息,发送给所述服务器端;
所述服务器端对各个客户端发来的结构体定义信息进行整合,形成各种结构体定义与使用每种结构体的客户端IP地址之间的对应关系列表,在之后收到客户端发送的协议数据报文时,解析出其中包含的结构体信息,并通过查询上述对应关系列表,推断出所有接收方IP,进而依据推断结果将数据转发到接收方。
(1)客户端
本公开所述通信转发系统的客户端启动模式为自启动,并作为一种服务一直运行在用户系统的各个节点中。
示例性实施例中的客户端优选使用Qt标准类库中QFileSystemWatcher 接口中的目录文件监控信号QFileSystemWatcher::directoryChanged和 QFileSystemWatcher::fileChanged实时监控用户指定路径下源文件中结构体定义是否发生变动,并触发相应的槽函数扫描整个文件目录以进行结构体定义信息的抓取。其中,所述源文件包括以cpp、h、cxx、cc、c后缀的文件;所述结构体定义信息包括结构体的名称、结构体的成员名称及变量类型。
示例性实施例中的客户端优选利用Qt标准类库的QRegularExpression 与QRegularExpressionMatch接口对扫描的文件内容进行匹配,抓取其中的结构体定义;同时,为了能够抓取不同规则下的协议数据结构体,采用了 C++正则表达式进行提取,以支持C/C++不同规则的结构体定义。
示例性的提取算法流程如下:
①首先从源码文件中读取文本,将文本内容全部读取到字符串中,然后对整个文件字符串进行以下处理;
②多行注释去除。正则表达式:\\/\\*[\\s\\S]*?\\*\\/,将匹配到的多行注释文本替换为空;
③单行注释去除。正则表达式://[\\s\\S]*?\\r\\n,将匹配到的单行注释文本替换为空。
④去除换行和回车符。不用正则表达式可直接替换;
⑤去除C++风格结构体中的函数体。正则表达式为: \\w+\\s*\\([\\s\\S]*?\\)\\s*\\{[\\s\\S]*?\\}。将匹配到的函数体替换为空。
⑥提取结构体,包括C和C++两种风格。正则表达式:
\\s*(\\btypedef\\b\\s+|\\s*)\\bstruct\\b(\\s*\\w+|\\s*)[\\s\\ S]*?{\\s*([\\s\\S]*?)\\s*}([\\s\\S]*?);。将匹配到的结构体名字保存,匹配到的结构体内容保存,做进一步匹配。考虑到结构体在定义时具有不同的形式,正则表达式的typedef关键词也是不绝对匹配,struct后的结构体名称也是不绝对匹配,最后{}后面的结构体名字也为不绝对匹配,因此在提取过程中,对提取得到的结果进行分析,对提取的名称进行优先分级,首选struct关键词后的名字,若没有,采用最后的结构体别名。
⑦提取结构体内容,提取对应的元素类型,变量名称。可以提取常用的基本类型,一维数组,二维数组。正则表达式为:
\\s*(unsigned\\s+\\w+|\\w+)\\s*(\\*|\\s*)\\s*(\\w+)(\\s*\\[(\ \w+)\\]\\s*\\;|\\s*\\;|\\s*\\[(\\w+)\\]\\s*\\[(\\w+)\\]\\s*\\;)。将匹配到的元素信息进行拆分,字符串处理。
权4示例性实施例中的客户端对来自各源文件的结构体定义信息进行整合并按照一定格式存储到嵌入式数据库Sqlite3的DB文件中,形成本地节点SQLite数据库。数据库的示例性结构见表1,2,3,4。
表1客户端配置信息数据库表
表2客户端文件列表信息数据库表
表3客户端结构体数据库表
表4客户端结构体元素数据库表
作为优选方案,示例性实施例中客户端建立与服务器端之间的socket 连接,通过TCP网络通信的方式将抓取到的结构体定义信息发送到服务器端。
作为优选方案,示例性实施例中客户端以动态链接库形式为用户提供调用接口,接收用户传入的需要传送的协议数据报文,并对传入的协议数据报文进行序列化,转发给所述服务器端;同时,所述客户端采用类反射技术,将从服务器端接收而来的协议数据报文进行反序列化,反射成为结构体指针提供给用户。
本实施例中,客户端给开发用户提供了调用接口SendStruct(const char*structname,const char*buffer),以传入要发送的结构体的名字,第二个参数为结构体对象的内存buffer。该函数将传入的结构体序列化,并将序列化后的结构体通过消息发送给运行在客户端的转发组件,由转发组件转发给通信服务器。
在本公开之前的现有技术中,用户系统想要实现网络通信,发送方需要自行创建Socket对象,并制定相应协议,在需要通信的地方调用相应方法并指定接收方及端口号,将数据发送出去;接收方根据相应协议解析网络数据报文,并进行下一步处理,此过程繁琐且需要注意通信协议的同步性,否则会出现问题。而本实施例提供的匿名推断式转发服务和用户调用接口,使得用户可以首先加载所述通信转发系统客户端的动态链接库,然后在需要通信的地方调用动态链接库中相应的接口方法并将参数传入,其他的过程交由通信转发系统的客户端及服务器来完成整个通信过程即可。
而相应的,通信转发系统的客户端收到的来自服务器端的报文数据格式为二进制字符串,不能直接在用户系统中使用,本实施例中客户端优选借助 Qt类库自带类反射机制将二进制字符串反射为结构体对象。需要注意的是,在类反射之前需要调用qRegisterMetaType<Struct*>()将结构体类型进行注册,否则QMetaType无法获取该结构体类型及其成员组成。示例性的类反射核心代码如下:
int type=QMetaType::type("struct_a");
const QMetaObject*metaObj= QMetaType::metaObjectForType(type);
QObject*obj=metaObj->newInstance(Q_ARG(QString, QStringLiteral("struct_a")),Q_ARG(QObject*,nullptr)); Struct_B*an=qobject_cast<Struct_B>(obj);
类反射建立在Qt的元对象系统基础之上,且拥有元对象(QMetaObject),使用Q_PROPERTY和Q_INVOKABLE关键字注册类成员变量和类成员函数,通过QObject::metaObject()方法,所有继承于QObejct的类可以返回元对象系统为其生成的metaObject()对象,因而借助类反射机制使客户端获取数据变得容易,用户系统可直接从客户端获取结构体对象。
(2)服务器
附图1中给出了示例性实施例所述通信转发系统中服务器端的组成,主要包括节点数据收集与整合服务、目标节点推断服务、节点数据接收与转发服务和系统异步并行收发与监视服务。其中,节点数据收集与整合服务接收各客户端发来的存有结构体定义信息的文件,按照结构体名称为唯一标识进行分组整合,形成记载有各种结构体定义以及使用每种结构体的客户端IP地址的列表文件;目标节点推断服务对客户端发来的协议数据报文进行解析,找出其中包含的结构体类型,然后到节点数据收集与整合服务形成的列表文件中查找使用此结构体的节点,推断出目标节点,将目标节点信息发送给节点数据接收与转发服务;节点数据接收与转发服务接收来自客户端的协议数据报文,缓存到系统中,然后根据目标节点推断服务的推断结果,转发给接收方;系统异步并行收发与监视服务实现系统的各个进程之间的信息交互,以及系统各服务及模块的引导、启动和状态监控。
更加具体的实施方式如下。
·节点数据收集与整合服务
采用自启动模式,接收客户端发来的数据库文件,将不同用户系统节点 (一个客户端对应一个节点,但是一个节点可能同时运行着用户不同的系统,设计时考虑了同时存在多个系统使用本发明的情况)的数据库文件放置在路径下不同文件夹内,根据文件夹名称区分;同时,将所有节点数据库文件中的信息(包括节点的IP地址、通信端口号以及本节点中所有结构体等信息),按照结构体名称为唯一标识进行分组整合,得到多个以结构体名称为组名、以上传该结构体的节点信息为组员的组,将这些组及相关信息存储到SQLite数据库中供后续操作使用。
服务器端数据库的示例性结构见表5,6,7。
表5服务器端配置信息表结构
表6服务器端结构体表结构
表7服务器端结构体元素表结构
附图2中示出了示例性实施例所述通信转发系统对各节点结构体定义的监控、抓取,进而对各节点的结构体定义信息进行汇总整合的过程。
为确保数据库文件接收与整合过程不冲突,本实施例中的节点数据收集与整合服务优选设置了缓存目录,而整合的过程在另一个文件夹中完成,两个过程分别在两个线程中进行;同时存在一个状态监控进程,若当前处于整合状态,则不将缓存目录中文件转移到整合目录,若未处于整合状态,将已接收的文件转移到整合目录下,并通知整合线程进行整合任务。
另外,当某一节点添加了新的结构体类型后,若数据库文件不能及时整合,服务器在接收到此类型的结构体数据报文时,将造成无法发送的状况,因此本实施例在客户端单独开线程负责发节点数据库文件到服务器端;服务器端也开线程负责及时整合各节点的数据库文件,并在线程中使用快速数据库操作,缩短从添加结构体类型到支持发送此类型数据的时间。
·目标节点推断服务
该服务的启动模式也为自启动。当服务器通过指定端口接收到任意通信转发客户端发送的数据报文后,该服务将数据报文解析为结构体类型以及结构体数据内容,根据结构体类型,到节点数据收集与整合服务整合后的 SQLite数据库中查找以该结构体名称命名的组,则该组中的所有节点即为拥有此结构体的节点,其中除去发送此包结构体数据报文的节点后的剩余节点即可推断为此结构体数据报文的接收方。该服务将这些节点信息发送给节点数据接收与转发服务,为后续操作准备。
考虑到结构体使用范围不同,推断为接收方的节点数目不一,若采用循环单播方式发送会存在时间差,各节点若接收时间有差异会导致系统不同步。因而优选采用将所有接收节点的IP地址等信息作为报文头拼接到数据最前端,再进行发送的方式,有效避免了循环单播方式中的不同步问题,达到更精确的同步。
附图3中给出了示例性实施例中目标节点推断服务的流程图。
·节点数据接收与转发服务
该服务的启动模式为自启动,负责接收来自节点的数据,缓存到系统中;然后根据目标节点推断服务的结果,转发给接收方节点。在发送完成后会根据接收方的反馈信息更新发送状态。
由于UDP通信没有反馈机制和数据丢失重传机制,无法保证数据的可靠传输,示例性实施例中为了提高传输过程的可靠性,通过两种方式实现数据转发过程:服务器主动广播方式和客户端主动抓取方式。其中,服务器主动广播方式指,系统收到发送方结构体数据后,按照目标节点推断的结果,将接收方的相关信息(如所有接收方IP地址、CRC校验码等)拼接在要转发的数据前,然后通过广播的方式转发出去;客户端主动抓取方式指,服务器与所有客户端之间形成新的socket链路,客户端主动向服务器询问通信端口,获取端口号后通过UDP绑定,主动高频次向服务器询问是否有本节点数据,当服务器接收到来自接收方的询问时,查询本地是否有该接收方的数据,若有则通过新的端口发送,反之忽略该请求。两种方式共同保障结构体数据发送到接收方。其中主动抓取的询问频次可取为10ms一次。
附图4示出了示例性实施例中服务器通过推断和广播方式转发用户数据的过程;图5示出了示例性实施例中服务器通过推断和主动抓取方式转发用户数据的过程。
当应用上述主动抓取方式后,通信转发系统的服务器在运行过程中,会收到来自多个节点的高并发高频次大数据量的请求或询问,对此,可以在服务器的主线程中预先创建多个任务线程,一旦有客户端请求或询问就启动这些任务线程来处理客户端到来的链接;同时在转发过程针对每一种结构体类型,建立队列来存储发送状态,只有队列中所有节点都收到此数据包后,才将此次发送状态对应的元素移出队列,对于队列中长时间没有更新为已接收状态的元素,将定时对其进行处理出队,或者若超时则清空队列以防造成死锁。示例性的队列元素所包含字段见表8。
表8队列存储元素包含的字段表
此外,为了保证数据实时有效转发,当服务器端与客户端形成新的 socket连接时,可以对应启动3个线程来保证过程顺利完成:第一个线程用于服务器处理来自客户端的主动抓取请求,由于主动抓取的频次高(例如每10ms抓取一次),因而需要添加标志位用以区分数据包序号、是否发送过某序号的数据包、是否接收到反馈信息,若已发送过此数据,则自动忽略该抓取请求。第二个线程用于服务器端有该客户端数据后,主动向客户端点对点发送数据。第三个线程用于控制前述存储发送状态的队列,每当服务器以主动广播方式发送一次数据后,则队列中增加一组元素,元素个数表示这一包数据理应发送到的客户端的数量,元素的字段见表8所示;当客户端收到数据时,会给服务器发送反馈信息,服务器收到反馈信息后,到队列中更新对应元素的STATE字段为已发送状态;由于在系统使用过程中数据收发可能十分频繁,队列数据量可能巨大,此线程负责及时更新及控制队列量级,若一组元素中某几个元素长时间未收到反馈,或超过规定刷新时间(例如5s),则主动将该组元素出队,清空超时元素。
如附图5所示,当客户端向服务器端主动抓取数据时,客户端与服务器之间建立新的socket连接,专门用于发送主动抓取命令及服务器回复的数据包;服务器会通过存储发送状态的队列来记录是否已经向该客户端主动广播过当前数据包,从而避免了多次发送同样数据而造成数据混乱。
进一步的,由于在对队列操作过程中,存在入队、出队、更新队列元素等多种操作,这些操作由不同线程完成,因而引入互斥锁,保证对队列中的元素操作是序列化的。Qt标准类库QMutex类提供了线程之间的序列化, QMutex的目的就是为了保护一个对象、数据结构或者一部分代码在某个时期只能被一个线程访问,配合QMutexLocker使用,使锁定和解锁表现的一致。将对队列操作的代码放在lock()方法和unlock()方法之间,这时便只有一个线程能对其进行操作;当一个线程调用lock()方法,其他的线程如果也在同样的地方调用lock(),需要等到这个被锁定的地方被unlock()才可使用。
另外,由于在使用UDP广播时,只要处于当前网络内的电脑或其他接收端都可以收到数据,对信息安全有影响,因而在转发前需要对数据进行加密。示例性加密方法:
采用非对称加密算法管理对称加密算法的秘钥,然后用对称加密算法加密数据,这样做可以集成两类加密算法的优点,即实现了加密速度快,又实现了安全方便管理秘钥。同时,为了保证传输数据的完整性,采用MD5算法验证数据传输过程中是否经过修改,因为相同的生成算法对于同一明文只会生成唯一的密文,将密文添加到数据末尾,客户端收到数据后,采用相同算法计算数据生成密文,若生成的密文与数据尾端相同,则数据完整未被修改,可进行下一步使用。
·系统异步并行收发与监视服务
该服务的启动模式为自启动,用于保证系统在高频次、大数据量通信等情况下的接收与转发效率。
本发明中,服务器端将接收、转发等功能拆分成多个进程,这些进程之间的数据交换通过Windows系统消息实现。例如:接收进程通过TCP Socket 收到来自通信转发客户端的数据报文后,将数据通过Windows消息发送到转发进程;此时转发进程一直在NativeEvent方法中等待消息,收到数据后,去数据库中查询存储的信息并推断出所有接收方IP,进而依据推断结果以 TCP通信的方法通过多种转发方式将数据发送到接收方。据此,各个进程独立存在而又互相联系,异步并行,某一进程发生异常不会造成其他进程发生异常。
服务器端各服务之间使用Windows系统消息机制互相通信时,内部使用的结构体示例见表9。
表9服务器内部结构体类型表
进一步地,系统所有进程以并行的方法处理来自不同发送方的数据,维护接收方的socket连接,可以提高系统处理数据的效率,使其模块化更强。
该服务还负责服务器端各服务及模块的引导、启动、及状态监测工作,当其他服务出现异常时,该服务将记录问题日志并自动重启发生异常的服务。优选地,监视其他服务是否正常工作采用心跳检测机制:其他服务及相关进程每隔2s向监视服务发送一次心跳报文,若三次未收到某一服务F的心跳报文,则执行杀死服务F及相关残留进程的命令后,到服务F所在路径下重启该服务及所有进程。
附图6给出了示例性实施例所述基于匿名推断的通信转发系统的整体工作流程图。
综上可见,基于匿名推断的通信转发客户端通过自动抓取源文件中的结构体定义并保持客户端和服务器端的同步,代替用户手动更新通信协议及指定接收方,节省了客户代码量;进而通过两种转发方式确保了数据传输的可靠性,从而避免了以UDP方式通信时数据丢包不作为的问题;借助Qt信号槽机制实现在不同线程间发送信号,通过connect()方法让两个互不相干的对象连接起来,同时一个信号可以连接多个槽函数,多个信号也可以连接同一个槽函数,因而极大的提高了线程间通信效率;服务器端各个服务之间的通信基于Windows系统的消息机制实现,保证了线程间、进程间通信的安全与稳定性;整个系统松耦合的模块化设计与智能的后台运行逻辑,保障了程序的可靠性与操作的连续性。
应用示例:
本公开所述通信转发系统是为了重点解决用户在项目开发状态下的使用便利性设计的,在用户的项目开发和开发完成后的正式部署两种情况下,本公开应用方式不同,区别在于:在项目开发状态下,本公开需要自动抓取用户定义的结构体,并保证客户端和服务器端同步,自动推断出用户发送的协议数据报文的接收方,进而完成转发过程;而项目部署状态下,本公开只需按照之前提取、汇总完成的结构体定义列表,自动推断出用户发送的协议数据报文的接收方,进而完成转发过程。详细分开描述如下。
(1)用户在项目开发状态下,将通信转发客户端及服务器安装到对应开发节点处,用户需指定开发目录并确认各节点之间网络通信正常。在用户开发过程中,通信转发客户端实时监测指定开发目录下所有源文件的文件属性是否发生变动,若发生变动则触发监控服务,遍历整个文件夹及子文件夹中所有文件,将含有struct、int、double等关键字的结构体定义信息抓取出来,将结构体类型名称及结构体成员及其数据类型通过调用接口函数的形式存储到本地节点SQLite数据库中。
数据库文件存储完成后,通信转发客户端将该文件通过TCP通信的方式发送到通信转发服务器相应路径下,此时,通信转发服务器便开始将所有节点的结构体定义整合存储。
当用户系统按照前面定义的结构体发送数据包时,调用通信转发客户端的接口,将结构体名称及数据传入,客户端便将此数据以点对点方式发送到服务器。
当服务器收到客户端发来的数据包时,在服务器数据库中查询到以该结构体名称命名的组,该组中包含的所有节点,除去发送此包结构体数据的节点后剩余节点即可推断为此结构体数据的接收方。根据整合后的数据库文件,将数据包添加必要信息(如IP地址等),然后以两种方式(服务器主动广播方式和客户端主动抓取方式)发送到对应客户端去。客户端收到需要的数据后,将以类反射的方法将结构体数据还原出来,发送给用户系统节点供后续使用。
举例:用户安装通信转发服务器及客户端到开发节点,在程序中调用客户端相关动态链接库成功,确保网络通信正常后,即可开始使用。开发节点 A在开发过程中定义了一个新的结构体类型struct_a,此时通信转发客户端检测到源文件发生改动,便开始遍历源文件内容,将抓取到的所有结构体信息存储到节点A数据库文件中(包含去重过程,只存储新出现的结构体类型 struct_a及其相关信息),并通过TCP通信发送至服务器。节点A为结构体 struct_a赋值后,在需要发送结构体到节点B处时,调用客户端动态链接库的发送接口,将结构体类型名称“struct_a”、结构体数据内容作为参数传入。通信转发客户端接收到struct_a数据后,通过单播将数据发送到服务器,此时服务器端的数据库文件理应整合完成(汇总了节点A、B及其他节点的数据库文件),服务器到服务器端结构体表(见表6)中查询SNAME 字段为“struct_a”的记录,再根据每条记录中的PROID字段(该字段记录了使用该结构体的用户系统,指上面解释的一个节点同时运行用户多个系统的情况,记录是哪个系统使用这个结构体),到服务器配置信息表(见表5) 中查询ID与PROID相同的所有记录,这些记录中的IP字段即为包含结构体 struct_a的节点IP集合,去除发送方的IP,剩余即为接收方的IP集合。服务器通过两种方法将数据发送出去:第一种,服务器将这些IP信息拼接到struct_a数据之前,并添加CRC校验码后,通过UDP广播到网络中,并将这一发送操作对应的信息入队(队列元素见表8);第二种,用户系统中节点B作为另一个客户端节点,在启动时向服务器申请一个端口用于建立新的socket连接,通过新的连接以10ms每次的速度向服务器询问是否有本节点的数据,此时,服务器根据数据库的查询结果,若有需要发送给节点B 的数据,则通过与节点B间新的socket连接发送过去,同时将发送操作对应的信息入队,若没有需要发送给节点B的数据,则忽略节点B的询问。节点B处客户端收到结构体数据后,由于数据格式为二进制格式,且仅知道结构体名称,客户端通过类反射的方式将数据还原为结构体对象,节点B通过动态链接库的相应接口获取到结构体对象。
(2)用户在正式部署系统时,将通信转发客户端及服务器安装到对应部署节点处,用户需确认各节点之间网络通信正常。在部署过程中,用户需将开发过程中通信转发服务器整合后得到的数据库文件拷贝至部署阶段通信转发服务器路径下供其使用。
当用户系统发送数据包时,调用通信转发客户端的接口,将结构体名称及数据传入,客户端将此数据以点对点方式发送到服务器。同前所述,服务器收到客户端发来的数据包后,推断出接收方的IP,并将数据包添加必要信息,以两种转发方式(服务器主动广播方式和客户端主动抓取方式)发送到对应客户端去。客户端收到需要的数据后,将以类反射的方法把结构体数据还原出来,发送给用户系统节点供后续使用。
若用户系统发生协议更新或升级,需重新拷贝整合后的数据库文件到通信转发服务器中,确保数据库中是最新的节点结构体信息。
举例:用户安装通信转发服务器及客户端到各个部署节点,在程序中调用客户端相关动态链接库成功,确保网络通信正常,还需将开发过程中通信转发服务器整合后的数据库文件拷贝至部署阶段通信转发服务器路径下供其使用,即可开始使用。部署节点A在需要发送结构体struct_b到节点B 处时,调用客户端动态链接库的发送接口,将结构体类型名称“struct_b”、结构体数据内容作为参数传入。通信转发客户端接收到struct_b数据后,通过单播将数据发送到服务器,服务器收到后,推断出接收方的IP集合(具体方法同前,不再赘述),然后通过服务器主动广播方式和客户端主动抓取方式将数据发送出去(具体方法同前,不再赘述)。节点B处客户端收到结构体数据后,通过类反射方式将数据还原为结构体对象,节点B通过动态链接库的相应接口获取到结构体对象。
上述技术方案只是本发明的一种实施例,对于本领域内的技术人员而言,在本发明公开了应用方法和原理的基础上,很容易做出各种类型的改进或变形,而不仅限于本发明上述具体实施例所描述的方法,因此前面描述的方式只是优选的,而并不具有限制性的意义。
Claims (10)
1.一种基于匿名推断的通信转发系统,包括通信转发客户端和服务器端,其中:
所述客户端实时监控用户指定目录下所有源文件中结构体定义的变动,并自动抓取其中的结构体定义信息,发送给所述服务器端,其中,所述结构体定义信息包括结构体的名称、结构体的成员名称和变量类型;
所述服务器端对各个客户端发来的结构体定义信息进行整合,形成各种结构体定义与使用每种结构体的客户端IP地址之间的对应关系列表,在之后收到客户端发送的协议数据报文时,解析出其中包含的结构体定义信息,并通过查询上述对应关系列表,推断出所有接收方IP,进而依据推断结果将数据转发到接收方,其中所述解析出其中包含的结构体定义信息包括:提取结构体的名称,提取结构体内容,提取对应的元素类型和变量名称。
2.根据权利要求1所述的基于匿名推断的通信转发系统,其特征在于,所述客户端使用Qt标准类库中的QFileSystemWatcher接口中的目录文件监控信号QFileSystemWatcher::directoryChanged和QFileSystemWatcher::fileChanged监控用户指定目录下源文件中结构体定义的变动,并触发相应的槽函数遍历整个文件目录以进行结构体定义信息的抓取。
3.根据权利要求1所述的基于匿名推断的通信转发系统,其特征在于,所述客户端利用Qt标准类库的QRegularExpression与QRegularExpressionMatch接口,基于C++正则表达式对扫描的文件内容进行匹配,抓取其中的结构体定义。
4.根据权利要求1所述的基于匿名推断的通信转发系统,其特征在于,所述客户端对来自各源文件的结构体定义信息进行整合并按照一定格式存储到数据库的DB文件中。
5.根据权利要求1所述基于匿名推断的通信转发系统,其特征在于,所述客户端通过TCP网络通信的方式将抓取到的结构体定义信息发送到所述服务器端。
6.根据权利要求1所述的基于匿名推断的通信转发系统,其特征在于,所述客户端以动态链接库形式为用户提供调用接口,接收用户传入的需要传送的协议数据报文,并对传入的协议数据报文进行序列化,转发给所述服务器端;同时,所述客户端采用类反射技术,将从服务器端接收而来的协议数据报文进行反序列化,反射成为结构体指针提供给用户。
7.根据权利要求1所述的基于匿名推断的通信转发系统,其特征在于,所述服务器端包括:
节点数据收集与整合服务:接收各客户端发来的存有结构体定义信息的文件,按照结构体名称为唯一标识进行分组整合,形成记载有各种结构体定义以及使用每种结构体的客户端IP地址的列表文件;
目标节点推断服务:对所述客户端发来的协议数据报文进行解析,找出其中包含的结构体类型,然后到所述节点数据收集与整合服务形成的列表文件中查找使用此结构体的节点,推断出目标节点,将目标节点信息发送给节点数据接收与转发服务;
节点数据接收与转发服务:接收来自客户端的协议数据报文,缓存到系统中,然后根据所述目标节点推断服务的推断结果,转发给接收方;系统异步并行收发与监视服务:实现系统的各个进程之间的信息交互,以及系统各服务及模块的引导、启动和状态监控。
8.如权利要求7所述的基于匿名推断的通信转发系统,其特征在于,所述节点数据接收与转发服务中的转发实现途径包括:
服务器主动广播方式:所述服务器端收到发送方的协议数据报文后,按照目标节点推断的结果,将接收方的相关信息拼接在要转发的数据前,然后通过UDP广播的方式转发出去;
客户端主动抓取方式:各节点的所述通信转发客户端与服务器端之间通过UDP绑定后,主动高频次向服务器询问是否有本节点数据,当服务器端接收到来自接收方的询问时,查询本地是否有该接收方的数据,若有则通过新的端口发送;
系统通过接收方的反馈信息及发送方的发送记录,协调这两种方式的使用,避免重复发送。
9.根据权利要求7所述的基于匿名推断的通信转发系统,其特征在于,所述服务器端各个服务之间的通信利用Windows系统的消息机制实现,各个进程的线程之间的通信利用Qt信号槽机制实现。
10.根据权利要求7所述的基于匿名推断的通信转发系统,其特征在于,所述异步并行收发与监视服务监测到其他服务出现异常时,记录问题日志并根据心跳状态监测自动重启发生异常的服务。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910518975.6A CN110519212B (zh) | 2019-06-16 | 2019-06-16 | 一种基于匿名推断的通信转发系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910518975.6A CN110519212B (zh) | 2019-06-16 | 2019-06-16 | 一种基于匿名推断的通信转发系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110519212A CN110519212A (zh) | 2019-11-29 |
CN110519212B true CN110519212B (zh) | 2021-06-22 |
Family
ID=68622461
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910518975.6A Active CN110519212B (zh) | 2019-06-16 | 2019-06-16 | 一种基于匿名推断的通信转发系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110519212B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112988208B (zh) * | 2019-12-18 | 2023-06-30 | 腾讯科技(深圳)有限公司 | 数据更新方法、装置、设备及存储介质 |
CN113472621B (zh) * | 2020-03-30 | 2023-05-30 | 北京沃东天骏信息技术有限公司 | 网络数据转发方法、装置和系统 |
CN111880026B (zh) * | 2020-07-07 | 2023-08-04 | 武汉精立电子技术有限公司 | 一种面板检查装置 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101141717A (zh) * | 2006-09-06 | 2008-03-12 | 深圳市朗科科技有限公司 | 基于无线通信的多台手持设备之间的文件下载方法 |
CN102479130A (zh) * | 2010-11-25 | 2012-05-30 | 上海宇芯科技有限公司 | 一种跨平台跨语言单芯片系统的验证方法 |
CN102946347A (zh) * | 2012-12-07 | 2013-02-27 | 烽火通信科技股份有限公司 | 一种加速Linux系统本地数据包处理的方法及装置 |
CN103092866A (zh) * | 2011-11-03 | 2013-05-08 | 金蝶软件(中国)有限公司 | 数据监控方法及监控装置 |
CN105915658A (zh) * | 2016-07-04 | 2016-08-31 | 上海优刻得信息科技有限公司 | 获取客户端ip地址的数据调用方法、数据传输方法 |
US9904500B2 (en) * | 2014-06-18 | 2018-02-27 | David Milton Durlach | Choreography of kinetic artwork via video |
CN109656894A (zh) * | 2018-11-13 | 2019-04-19 | 平安科技(深圳)有限公司 | 日志规范化存储方法、装置、设备及可读存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110167360A1 (en) * | 2010-01-04 | 2011-07-07 | Hit Development Llc | Incoming web traffic conversion |
-
2019
- 2019-06-16 CN CN201910518975.6A patent/CN110519212B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101141717A (zh) * | 2006-09-06 | 2008-03-12 | 深圳市朗科科技有限公司 | 基于无线通信的多台手持设备之间的文件下载方法 |
CN102479130A (zh) * | 2010-11-25 | 2012-05-30 | 上海宇芯科技有限公司 | 一种跨平台跨语言单芯片系统的验证方法 |
CN103092866A (zh) * | 2011-11-03 | 2013-05-08 | 金蝶软件(中国)有限公司 | 数据监控方法及监控装置 |
CN102946347A (zh) * | 2012-12-07 | 2013-02-27 | 烽火通信科技股份有限公司 | 一种加速Linux系统本地数据包处理的方法及装置 |
US9904500B2 (en) * | 2014-06-18 | 2018-02-27 | David Milton Durlach | Choreography of kinetic artwork via video |
CN105915658A (zh) * | 2016-07-04 | 2016-08-31 | 上海优刻得信息科技有限公司 | 获取客户端ip地址的数据调用方法、数据传输方法 |
CN109656894A (zh) * | 2018-11-13 | 2019-04-19 | 平安科技(深圳)有限公司 | 日志规范化存储方法、装置、设备及可读存储介质 |
Non-Patent Citations (4)
Title |
---|
《C++定义结构体协议实现服务器和客户端的网络通信》;wwxy261;《https://blog.csdn.net/wwxy1995/article/details/88425987》;20190312;全文 * |
《Offset addressing approach to memory-efficient IP address lookup》;Kun Huang;《2011 Proceedings IEEE INFOCOM》;20110630;全文 * |
《Qt学习——结构体在qt的传递》;ipfpm;《https://blog.csdn.net/ipfpm/article/details/88699038》;20190320;全文 * |
《基于P2P的点播系统客户端的设计与实现》;古雄辉;《中国优秀硕士学位论文全文数据库》;20160331;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN110519212A (zh) | 2019-11-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110519212B (zh) | 一种基于匿名推断的通信转发系统 | |
EP3660664B1 (en) | File folder transmission on network | |
US7240091B1 (en) | Method and system for supporting off-line mode of operation and synchronization | |
US8195757B2 (en) | Method, apparatus and computer program for controlling retention of publications | |
WO2020135575A1 (zh) | 一种获取网络拓扑的系统、方法和服务器 | |
CN102130838B (zh) | 一种基于阿瑞斯协议的对等网络缓存系统的实现方法 | |
CN105740418A (zh) | 一种基于文件监控和消息推送的实时同步系统 | |
EP1889423A1 (en) | A system and method for transferring email file attachments over a telecommunication network using a peer-to-peer connection | |
CN107688611B (zh) | 一种基于saltstack的Redis键值管理系统及方法 | |
US20090012966A1 (en) | Network configuration restoration method and system | |
JP2006146927A (ja) | Snmp基盤のネットワーク管理装置および方法 | |
CN102065136B (zh) | 一种p2p网络安全数据传输方法及其系统 | |
WO2009111965A1 (zh) | 一种数据同步的方法、设备及系统 | |
CN107370809A (zh) | 数据同步方法及数据搜索系统 | |
CN113709250B (zh) | 一种基于订阅发送模式的跨域用户数据同步方法 | |
CN101296237B (zh) | 资源批量处理系统和方法 | |
CN110661891B (zh) | 一种基于单向网络的跨网文件即时传输方法及系统 | |
CN112052227A (zh) | 数据变更日志的处理方法、装置和电子设备 | |
US20070088854A1 (en) | Apparatus for searching TCP and UDP sockets | |
CN110909030A (zh) | 一种信息处理方法及服务器集群 | |
CN108737246B (zh) | 消息下发方法、装置、存储介质和服务器 | |
US9852031B2 (en) | Computer system and method of identifying a failure | |
CN109413118B (zh) | 一种实现会话同步的方法、装置及存储介质、程序产品 | |
CN104468767A (zh) | 一种云存储数据冲突检测方法及系统 | |
CN109688204B (zh) | 基于ndn网络的文件下载方法、节点、终端 |
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 |