技术特征:

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数据类型连续出现2n(n为正整数)个字符串类型时,则在写进第N个字符串类型后,修正参数R取2;

当值value数据类型连续出现2n+1(n为正整数)个字符串类型时,则在写进第N个字符串类型后,修正参数R取3;

a5)接着再继续处理后面的tlv;

(2.3.2)TLV格式数据对象的解码方法如下:

b1)读取tag用ntohl转换为主机字节序得到类型,指针偏移+4

b2)读取lengh用ntohl转换为主机字节序得到长度;指针偏移+4

b3)根据得到的长度读取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。

3.根据权利要求1所述的一种基于C语言的TLV格式协议快速解析方法,特征在于,网络通道socket长链接模块的创建和连接;

(3.1)客户机端使用网络通道socket长链接模块与服务器创建网络连接;

(3.2)当数据发送完成后网络通道socket长链接模块的链接不断开,一直保留到异常或者是程序退出为止才断开;

(3.3)服务器端建立socket长链接的一般步骤是:

structsockaddr_inaddr;定义一个ip地址;

(3.3.1)、创建一个socket,用函数socket();

(3.3.2)、设置socket属性,用函数setsockopt();

(3.3.3)、绑定IP地址、端口等信息到socket上,用函数bind();

(3.3.4)、开启监听,用函数listen();

(3.3.5)、接收客户端上来的连接,用函数accept();

(3.3.6)、收发数据,用函数send()和recv(),或者read()和write();

(3.3.7)、关闭网络连接;

(3.3.8)、关闭监听;

(3.4)、客户端建立socket长链接一般步骤是:

(3.4.1)、创建一个socket,用函数socket();

(3.4.2)、设置socket属性,用函数setsockopt();

(3.4.3)、绑定TP地址、端口等信息到socket上,用函数bind();

(3.4.4)、设置要连接的对方的IP地址和端口等属性;

(3.4.5)、连接服务器,用函数connect();

(3.4.6)、收发数据,用函数send()和recv(),或者read()和write();

(3.4.7)、关闭网络连接。

c语言的tlv协议编解码函数,基于C语言的TLV格式协议快速解析方法与流程相关推荐

  1. Netty使用篇:Http协议编解码

    第一章:概述 Http协议是一个应用层协议.在Http协议之上又构建出来了WebSocket这种双向通信的协议.可以主动在服务端帮我们去推数据,实际上我们现在做一些双向通信的比较很重要的东西,比如:推 ...

  2. ChirpStack 笔记 2.7 JS编解码函数的使用

    文章目录 前言 1 ChirpStack 中如何启用编解码函数功能 1.1 编解码组件的 API 使用 请求示例 NONE 请求示例 CAYENNE_LPP 请求示例 CUSTOM_JS 2 Java ...

  3. 【cue语言系列学习】base64编解码

    [cue语言系列学习]base64编解码 release author: ningan123 release time: 2022-08-14 在线运行 工具 三种不同的输出方式,输出的结果是不一样的 ...

  4. 各种与视频编解码以及视频图像处理的应用相关的新技术,新方法,各种软件开发相关的算法,思想。...

    1. 各种视频压缩标准(MPEG2, MPEG4, H261/2/3/4,X264, T264以及H264(AVC)和HEVC(H265)等的优化,改进,创新. 2. 各种不同平台的(CPU, GPU ...

  5. R语言ggplot2可视化:使用geom_smooth函数基于lm方法为每个分组的部分数据(subset data)拟合趋势关系曲线、对指定范围的数据拟合曲线

    R语言ggplot2可视化:使用geom_smooth函数基于lm方法为每个分组的部分数据(subset data)拟合趋势关系曲线.对指定范围的数据拟合曲线 目录

  6. R语言使用fs包的path_wd函数基于自定义文件路径规则,批量生成多个文件或者文件夹对应的绝对(absolute)文件路径(constructs absolute path)

    R语言使用fs包的path_wd函数基于自定义文件路径规则,批量生成多个文件或者文件夹对应的绝对(absolute)文件路径(constructs an absolute path from the ...

  7. R语言使用dplyr包的full_join函数基于多个字段(数据列)全连接两个dataframe、按照多列对数据进行全连接

    R语言使用dplyr包的full_join函数基于多个字段(数据列)全连接两个dataframe.按照多列对数据进行全连接 目录

  8. R语言使用epiDisplay包的tableStack函数基于分组变量生成统计分析表(包含描述性统计分析、假设检验、不同数据使用不同的统计量和假设检验方法)、自定义指定Bartlett检验的p值水平

    R语言使用epiDisplay包的tableStack函数基于分组变量生成统计分析表(包含描述性统计分析.假设检验.不同数据使用不同的统计量和假设检验方法).自定义设置assumption.p.val ...

  9. 深入理解视频编解码技术----基于H.264标准及参考模型 读书笔记

    书名: <深入理解视频编解码技术--基于H.264标准及参考模型> 第一章 1.各种变换,如DCT, 离散傅里叶变换等,是为了变换到另一个域中,便于对图像进行压缩(如果加入预测,残差值会更 ...

最新文章

  1. github下载源码也用命令进行安装包的联系
  2. 玩远程 可视对讲系统几大新兴应用分析
  3. 关于网络蜘蛛以及搜索蜘蛛爬行
  4. C++ 类模板语法初步01
  5. RocketMQ中消息的优先级
  6. webpack的一些plugin,怎么使用webpack对项目进行优化
  7. jquery值ajaxForm
  8. securerandom java_Java 随机数 Random VS SecureRandom
  9. 将table导出为Excel的标准无乱码写法
  10. Docker 三剑客之 Docker Swarm
  11. sql语句智能提示插件
  12. 【毕业设计】基于单片机的超声波雷达系统
  13. Unity Demo ——3D时钟
  14. 京东评论爬虫(详解)
  15. python海龟图画皮卡丘_用python画一只皮卡丘
  16. 微信读书vscode插件_推荐 10 款有趣的 VSCode 插件
  17. web3.js的provider
  18. python中strip的用法
  19. 中国没有掌握的尖端技术_适用于所有人的尖端AAA遮光技术
  20. xampp 可道云_Windows下用kodexplorer可道云在本地搭建私有云的步骤

热门文章

  1. 【内网学习笔记】21、哈希传递与票据传递
  2. python怎么打印图片_Python+OpenCV图像处理——打印图片属性、设置存储路径、调用摄像头...
  3. 完成8亿D轮融资,MINIEYE预计第三季度实现L2++项目交付
  4. ios 运行android应用程序,iOS与Android应用程序沙盒机制的研究与总结
  5. NURBS概念[转载]
  6. 计算机基础表格函数基础知识大全,计算机基础-EXCEL公式和函数.ppt
  7. Android大厂面试题锦集附答案(BAT TMD JD 小米)
  8. CentOS网络配置步骤
  9. c# 如果控制智能停车系统出入口道闸模块开关
  10. Android【平移动画】