zoukankan      html  css  js  c++  java
  • protocol buffer通信协议 c语言使用和内部打包解析

    protocol buffer是谷歌开发的一种开源数据传输语言格式,类似于json和XML等,在嵌入式开发中据我所知蓝牙通信经常用到protobuf,主要特点是打包和解包速度快,同时本身具有一定的加密性,虽然经过本人分析,加密性并不高哈哈,不过已经比json和xml这种直接把数据直观显示出来的加密性高很多了。

    目前protobuf支持的语言:

     C语言外部库

    比较显著的几个特点:

    1】数据打包和解包速度快,基本上打包和解包的过程就是把数据按照协议罗列上去,所以很快

    2】打包完数据体积小,主要还是整个过程中格式相关的东西比较少,导致占用带宽少,传输效率高

    3】有一定的加密性

    4】好上手,在官网上都有各种语言(C语言是单独的)的打包工具,只需要把自定义的protobuf结构文件按照官方wiki自动生成一下就可以了,会生成一些打包和解包的接口,使用的时候只需要按照将自己的数据传进去就可以了

    官网:https://code.google.com/p/protobuf/

    c语言版本网站:http://code.google.com/p/protobuf-c/

    probobuf-c生成工具的使用

    先下载安装google protocol buffer ,再下载安装 protocol buffer C,

    1】下载完成后,./configure --prefix=/usr/local 生成makefile文件

    2】执行make编译

    3】make install 安装到本地环境中

    可能遇到的一些问题

    1】linux缺少库的问题,缺少什么库就安装什么库,可以更换一个速度快一点的源,同时执行sudo apt-get update 和 sudo apt-get upgrade

    2】缺少gcc、g++等软件,执行sudo apt-get install gcc 和sudo apt-get install g++ 安装即可

    最后将.proto文件 放到指定目录下,执行protoc-c --c_out=. /test.proto 就可以在当前目录下生成指定的.c和.h文件

    所有的解包和打包接口都可以在.h文件中找到

    打包和解包源码简读: 1 /*proto源文 2 message TestMessage {

     1  /*proto*/ 
    2   message TestMessage {

    3   required uint32 num = 1; 4 optional bytes buf = 2; 5 } 6 /*.h文件中生成的对应结构体*/ 7 struct _Protos__TestMessage 8 { 9 ProtobufCMessage base; 10 uint32_t num; 11 protobuf_c_boolean hasbuf; 12 ProtobufCBinaryData buf; 13 }; 14 /* .h中与当前结构相关的所有接口 Protos__ methods */
    15 typedef struct _Protos__TestMessage Protos__TestMessage; 16 void protos__test_message__init(Protos__TestMessage*message); 17 size_t protos__test_message__get_packed_size(const Protos__TestMessage*message);
    18 size_t protos__test_message__pack(const Protos__TestMessage*message, 19 uint8_t *out); 20 size_t protos__test_message__pack_to_buffer(const Protos__TestMessage*message, 21 ProtobufCBuffer *buffer); 22 Protos__TestMessage* protos__test_message__unpack(ProtobufCAllocator *allocator, 24             size_t len, 25             const uint8_t *data); 26 void protos__test_message__free_unpacked(Protos__TestMessage*message, 27 ProtobufCAllocator *allocator);

    以上所有的接口实现都在.c文件中,

    最主要是打包接口和解包接口,阅读源码可以看到打包的过程就是按照结构的顺序去拼装数据;

    他只是向前航行,脚下是沉静碧蓝的大海,而头顶是金色的太阳。
  • 相关阅读:
    创建数据库表
    Pod Preset玩转K8S容器时区自动配置
    CentOS7 CPU 降频问题
    Kafka Offset Monitor页面显示空白
    zabbix监控kafka消费
    istio-禁用/允许sidecar设置
    Istio 1.1部署实践
    etcd磁盘清理步骤
    Kubernetes 集群中使用 Helm 搭建 Spinnaker
    利用Spinnaker创建持续交付流水线
  • 原文地址:https://www.cnblogs.com/bliss-/p/14597846.html
Copyright © 2011-2022 走看看