日期:2014-05-16 浏览次数:21023 次
在网络之间传递可读性强的数据,有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-lite.lib")
int main(int,char**)
{
return 0;
}