日期:2014-05-16  浏览次数:21035 次

protobuf入门详解(在windows下配置protobuf)

      在网络之间传递可读性强的数据,有xml,还有json。相比之下,json比xml要好。但是他们有个弊端,传递的数据是可读的,也就是没有加密,使用网络抓包工具立马可以抓到what you send and what you receive,那么怎么才能传递加密了的json串呢?

  简单的方法,在传递json之前,先对json加密,收到数据后再解密。加密和解密算法自然是自己设计最好了。

  后来我找到了bson,就是json的二进制。百度一下可知使用bson最流行的就是MongoDB数据库。下载bson然后编译,结果失败,原来bson要依赖boost,但是boost那么大啊,只好放弃bson了(我觉得第三方库有时提供的功能实在太多了,而我们根本不需要那么完整的功能,所以第三方库的设计者可以在设计时考虑各个功能之间尽量独立)。

  后来在网上找到了protobuf,这是google官方内部一直使用的一套数据架构,与json类似,但是效率很高占用空间很小。在写这篇博客之前,我试过好几次,但是每次都没能完整的编译运行一个工程出来(protobuf自带的sample太繁杂了,我一直没用)。下面详细叙述如何开始一个protobuf工程:

1,进入vsprojects目录,打开protobuf.sln,然后选择生成解决方案。(可选步骤:编译没有问题,运行debug目录下的lite-test.exe和tests.exe,其实看readme.txt中的英文也可以,里面写了步骤)(注意:在debug目录下有libprotobuf.lib和libprotobuf-lite.lib这2个重要文件,还有一个protoc.exe编译器)

2,将vsprojects目录下的google目录复制到vs安装目录的VC\\include(这一步很重要,因为include<>导致编译器在系统头文件目录搜索protobuf头文件)

PS:新建一个win32控制台工程,加入 #include <google/protobuf/stubs/common.h>,如果编译没有问题,说明目录设置正确。

3,新建一个person.proto文件,输入  (学习链接:protobuf二:第一个c++示例)

message Person
{
required string name = 1;
optional int32  age  = 2;
};

重点:把这个文件和第一步中生成的protoc.exe(这个文件其实官方也可以下载)复制到d盘,然后打开控制台输入:

protoc --cpp_out=d:\ person.proto

表示生成目录为 d:\ ,原文件为person.proto。之后会生成person.pb.h和person.pb.cc

4,综合以上运用:

新建win32控制台应用

#include "person.pb.h"
#pragma comment(lib,"libprotobuf.lib")

#pragma comment(lib,"libprotobuf-lite.lib")

int main(int,char**)

{

      return 0;

}

1楼zhoujielunzhimi昨天 13:05
如果要在protobuf中使用中文,最好先转换成UTF8,否则在解析时会提示一个error。转换方法,参考链接:http://blog.csdn.net/qq675927952/article/details/7496035