基于C语言的TLV格式协议快速解析方法技术

技术编号:20271945 阅读:75 留言:0更新日期:2019-02-02 03:27
本发明专利技术公开了基于C语言的TLV格式协议快速解析方法。属于TLV格式协议解析技术领域,该方法使得2G网络连接客户机和服务器之间的网络请求速度快、网络通信能力强、网络数据交换快和TLV格式的数据解析速度快。在客户机上设有编译器和解析器,在服务器上也设有编译器和解析器,从而使客户机和服务器都同时具备编码能力和解码能力;客户机和服务器通过网络通道socket长链接模块实现客户机和服务器之间的相互数据交换;在传输层对TCP/TP传输协议进行封装,然后采用数据对象tlv格式的数据流来传输2G网络的数据,从而实现客户机和服务器之间的快速数据交换。在解析器内设有能把一段TLV格式的数据反序列化成一个struct类型的TLV数据解析接口。

【技术实现步骤摘要】
基于C语言的TLV格式协议快速解析方法
本专利技术涉及TLV格式协议解析
,具体涉及基于C语言的TLV格式协议快速解析方法。
技术介绍
目前的2G网络连接一般都是采用HTTP网络模块访问(HTTP+TLV)方式,HTTP网络模块访问方式的单次接口请求时间一般在8s-10s,客户机和服务器之间的网络请求速度慢。在C语言环境中,要对一个TLV协议的数据做解析,一般情况下需要针对某一种数据实现一个单独的解析函数,如果在项目中有多种数据就都需要多个TLV协议的数据解析,这就必然造成代码冗余和开发效率低下。
技术实现思路
本专利技术是为了解决现有2G网络连接客户机和服务器之间的网络请求速度慢的不足,提供一种2G网络连接客户机和服务器之间的网络请求速度快、网络通信能力强、网络数据交换快、TLV格式的数据解析速度快的基于C语言的TLV格式协议快速解析方法。以上技术问题是通过下列技术方案解决的:基于C语言的TLV格式协议快速解析方法,在客户机上设有编译器和解析器,在服务器上也设有编译器和解析器,从而使客户机和服务器都同时具备编码能力和解码能力;客户机和服务器通过网络通道socket长链接模块实现客户机和服务器之间的相互数据交换;在传输层对TCP/IP传输协议进行封装,然后采用数据对象tlv格式的数据流来传输2G网络的数据,从而实现客户机和服务器之间的快速数据交换;在解析器内设有能把一段TLV格式的数据反序列化成一个struct类型的TLV数据解析接口;TLV数据解析接口把一段TLV格式的数据反序列化成一个struct类型的过程如下:在解析TLV格式的数据时加入面向对象的概念,通过将一个结构体目标的指针作为“对象”传入TLV数据解析接口,利用TLV数据解析接口的UnpackTlvBuff解析函数顺序解析出所有的TLV数据段;在解析完每一段TLV数据时,利用回调函数回调出相应的TLV数据段的类型tag、长度length、值value以及“对象”,回调函数中再针对不同的“对象”作相应的数据赋值,若该TAG对应的是一个基本数据类型参数则直接赋值,若该tag对应的是一个结构体对象则再次利用UnpackTlvBuff解析函数解析出结构体对象内部的TLV数据的值value,同时传入新的“对象”以区分目标,重复以上步骤直至解析完成;这样一个解析回调函数就能完成整个多层嵌套的结构体“对象”的解析过程,从而实现多层嵌套的复杂的TLV格式协议的数据快速解析。本方案通过一个双向通信的网络通道socket长链接模块(TCP/IP+TLV)代替了普通HTTP网络模块访问(HTTP+TLV),在传输层对TCP/IP传输协议封装,采用TLV格式约定格式的数据流,能使单次接口请求时间从8s-10s减小到2s-3s,从而使得客户机和服务器之间的网络请求速度快、网络通信能力强和网络数据交换快,TLV格式的数据解析速度快。在C语言环境中,实现了TLV格式的数据快速解析工具;实现的对外功能接口包括:TLV数据解析接口VOIDUnpackTlvBuff(void*target,uint8*pBuff,uint16bufLen,UnpackCBunpackCB)。支持的数据类型包括所有基本类型(byteint16int32char数组等)以及包含基本类型的自定义struct类型。作为优选,在客户机或服务器的发射端,对传输的数据对象进行编码,将编码后数据对象对应的数据类型转换成数据流;在客户机或服务器的接收端,将接受的数据对象对应的数据流转化为数据类型,对数据类型进行解码得到对应的数据对象;TLV格式是一种可变格式,其中,T是类型tag的缩写,L是长度length的缩写,V是值value的缩写,一个基本的数据元包括TLV这三个域,tag唯一标识该数据元,tag的长度为4个字节,length的长度为2个字节,value域的长度由length来指定,value就是数据本身;TLV格式数据对象的编码方法如下:a1)将类型tag用htonl转换为网络字节顺序,指针偏移+4;a2)将长度length用htonl转换为网络字节顺序,指针偏移+4;a3)若值value数据类型为int、char、short,则将其转换为网络字节顺序,指针偏移+4;a4)若值value数据类型为字符串类型,写进后,指针偏移+length+R,其中R为修正参数,R取自然数;当值value数据类型只有一个字符串类型时,则在写进这个字符串类型后,修正参数R取0;当值value数据类型连续出现2n(n为正整数)个字符串类型时,则在写进第N个字符串类型后,修正参数R取2;当值value数据类型连续出现2n+1(n为正整数)个字符串类型时,则在写进第N个字符串类型后,修正参数R取3;a5)接着再继续处理后面的tlv;TLV格式数据对象的解码方法如下:b1)读取tag用ntohl转换为主机字节序得到类型,指针偏移+4b2)读取lengh用ntohl转换为主机字节序得到长度;指针偏移+4b3)根据得到的长度读取value,若value数据类型为int、char、short,用ntohl转换为主机字节序,指针偏移+4;b4)若值value数据类型为字符串类型,写进后,指针偏移+length+R,其中R为修正参数,R取自然数;当值value数据类型只有一个字符串类型时,则在写进这个字符串类型后,修正参数R取0;当值value数据类型连续出现2n(n为正整数)个字符串类型时,则在写进第N个字符串类型后,修正参数R取2;当值value数据类型连续出现2n+1(n为正整数)个字符串类型时,则在写进第N个字符串类型后,修正参数R取3;b5)接着再继续处理后面的tlv。作为优选,网络通道socket长链接模块的创建和连接;客户机端使用网络通道socket长链接模块与服务器创建网络连接;当数据发送完成后网络通道socket长链接模块的链接不断开,一直保留到异常或者是程序退出为止才断开;服务器端建立socket长链接的一般步骤是:structsockaddr_inaddr;定义一个ip地址;创建一个socket,用函数socket();设置socket属性,用函数setsockopt();绑定TP地址、端口等信息到socket上,用函数bind();开启监听,用函数listen();接收客户端上来的连接,用函数accept();收发数据,用函数send()和recv(),或者read()和write();关闭网络连接;关闭监听;客户端建立socket长链接一般步骤是:创建一个socket,用函数socket();设置socket属性,用函数setsockopt();绑定TP地址、端口等信息到socket上,用函数bind();设置要连接的对方的IP地址和端口等属性;连接服务器,用函数connect();收发数据,用函数send()和recv(),或者read()和write();关闭网络连接。本专利技术能够达到如下效果:本专利技术通过一个双向通信的网络通道socket长链接模块(TCP/IP+TLV)代替了普通HTTP网络模块访问(HTTP+TLV),在传输层对TCP/IP传输协议封装,采用TLV格式约定格式的数据流,能使单次接口本文档来自技高网...

【技术保护点】
1.基于C语言的TLV格式协议快速解析方法,其特征在于,在客户机上设有编译器和解析器,在服务器上也设有编译器和解析器,从而使客户机和服务器都同时具备编码能力和解码能力;客户机和服务器通过网络通道socket长链接模块实现客户机和服务器之间的相互数据交换;在传输层对TCP/IP传输协议进行封装,然后采用数据对象tlv格式的数据流来传输2G网络的数据,从而实现客户机和服务器之间的快速数据交换;在解析器内设有能把一段TLV格式的数据反序列化成一个struet类型的TLV数据解析接口;TLV数据解析接口把一段TLV格式的数据反序列化成一个struct类型的过程如下:在解析TLV格式的数据时加入面向对象的概念,通过将一个结构体目标的指针作为“对象”传入TLV数据解析接口,利用TLV数据解析接口的UnpackTlvBuff解析函数顺序解析出所有的TLV数据段;在解析完每一段TLV数据时,利用回调函数回调出相应的TLV数据段的类型tag、长度length、值value以及“对象”,回调函数中再针对不同的“对象”作相应的数据赋值,若该TAG对应的是一个基本数据类型参数则直接赋值,若该tag对应的是一个结构体对象则再次利用UnpackTlvBuff解析函数解析出结构体对象内部的TLV数据的值value,同时传入新的“对象”以区分目标,重复以上步骤直至解析完成;这样一个解析回调函数就能完成整个多层嵌套的结构体“对象”的解析过程,从而实现多层嵌套的复杂的TLV格式协议的数据快速解析。...

【技术特征摘要】
1.基于C语言的TLV格式协议快速解析方法,其特征在于,在客户机上设有编译器和解析器,在服务器上也设有编译器和解析器,从而使客户机和服务器都同时具备编码能力和解码能力;客户机和服务器通过网络通道socket长链接模块实现客户机和服务器之间的相互数据交换;在传输层对TCP/IP传输协议进行封装,然后采用数据对象tlv格式的数据流来传输2G网络的数据,从而实现客户机和服务器之间的快速数据交换;在解析器内设有能把一段TLV格式的数据反序列化成一个struet类型的TLV数据解析接口;TLV数据解析接口把一段TLV格式的数据反序列化成一个struct类型的过程如下:在解析TLV格式的数据时加入面向对象的概念,通过将一个结构体目标的指针作为“对象”传入TLV数据解析接口,利用TLV数据解析接口的UnpackTlvBuff解析函数顺序解析出所有的TLV数据段;在解析完每一段TLV数据时,利用回调函数回调出相应的TLV数据段的类型tag、长度length、值value以及“对象”,回调函数中再针对不同的“对象”作相应的数据赋值,若该TAG对应的是一个基本数据类型参数则直接赋值,若该tag对应的是一个结构体对象则再次利用UnpackTlvBuff解析函数解析出结构体对象内部的TLV数据的值value,同时传入新的“对象”以区分目标,重复以上步骤直至解析完成;这样一个解析回调函数就能完成整个多层嵌套的结构体“对象”的解析过程,从而实现多层嵌套的复杂的TLV格式协议的数据快速解析。2.根据权利要求1所述的一种基于C语言的TLV格式协议快速解析方法,特征在于,(2.1)在客户机或服务器的发射端,对传输的数据对象进行编码,将编码后数据对象对应的数据类型转换成数据流;(2.2)在客户机或服务器的接收端,将接受的数据对象对应的数据流转化为数据类型,对数据类型进行解码得到对应的数据对象;(2.3)TLV格式是一种可变格式,其中,T是类型tag的缩写,L是长度length的缩写,V是值value的缩写,一个基本的数据元包括TLV这三个域,tag唯一标识该数据元,tag的长度为4个字节,length的长度为2个字节,value域的长度由length来指定,value就是数据本身;(2.3.1)TLV格式数据对象的编码方法如下:a1)将类型tag用htonl转换为网络字节顺序,指针偏移+4;a2)将长度length用htonl转换为网络字节顺序,指针偏移+4;a3)若值value数据类型为int、char、short,则将其转换为网络字节顺序,指针偏移+4;a4)若值value数据类型为字符串类型,写进后,指针偏移+length+R,其中R为修正参数,R取自然数;当值value数据类型只有一个字符串类型时,则在写进这个字符串类型后,修正参数R取0;当值value数据类型连续...

【专利技术属性】
技术研发人员:徐文龙
申请(专利权)人:杭州米加科技股份有限公司
类型:发明
国别省市:浙江,33

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1