Protobuf-c在项目中的应用

Protobuf-c 简单说明:
通过最近的使用,发现protobuf-c确实是做通信的一个很好的辅助性序列化协议工具。
Protobuf-c是protobuf的C语言版。其主要功能是在发送机和接送机中存有相同的,用来序列化和反序列数据的protobuf文件。
其通信过程大致可以这样描述:发送端(数据采集端)按需要的格式将协议封装好一定的易读的格式,经过protobuf文件将该协议转化为一段二进制数据流。接收端(数据分析端)收到一段二进制数据流,再使用protobuf文件反序列化得到相应格式的协议,按格式解析协议得到数据。


其优点在于:1、协议的定义格式采用类似结构体定义的方式,结构体的每个成员独立不受其他成员长度、类型影响,接收端只需要反序列化得到结构体数据后,提取所需要的某个成员的信息即可。这样可以使得通信双方不需要一个一个按字节来解析(比如:第几个字节是什么关键字,第几个字节是有效数据等)。
2、结构体成员可以随意增加,比如原来采集的需要温度,现在我们要加入湿度,在接收端后发送端,双方重新约定分别在各自的protobuf文件中,加入湿度的类型即可。这样就使得后面的协议版本可以完全很好的兼容之前的协议版本。


最后对我们DAQ产品中使用的协议流程进行说明一下。
1、 首先DAQ作为Client端,上位机作为Server端。通信协议按格式分为两段,第一段是包头(Header),第二段是包体(Body)。每个通信帧包头都会标明本帧通信的类型总长度,来告诉协议解析端。包头是一个结构体,包头不进行序列化。包体是包含有效的通信数据载体,包体是经过序列化和AES加密认证的。
2、 Client端首先主动连接Server端,发送认证请求,认证中有计算好的MD5值作为安全认证,如果Server端认为认证设备有效则会发送一个session 秘钥给Client端。
3、 Client端在之后的数据通信中,数据都用从Server端得到的session秘钥对数据进行AES加密后发给Server端,Server以后也将在有效认证时间内用该session 秘钥解析得到的加密通信数据。
4、 Client端到Server端有效认证,具有时效性,在认证时间过期后需要重新认证,获取新的认证通信session 秘钥。

你可能感兴趣的:(c语言,md5)