您的位置:首页 > 理论基础 > 计算机网络

[置顶] 使用protobuff 进行网络序列化和反序列传输实例

2017-03-15 17:22 501 查看
   首先我认为这个文章的读者应该是已经知道protobuff 是什么东西 该怎么用,为什么用,也就是 what    how why。如果你真的不知道,可以先去搜索引擎上读几篇他的介绍,如果可以翻墙去谷歌上读读英文文章更好。了解完protobuff后下来我就来点干货,也就是protobuff在网络传输中序列化和反序列的使用。虽然是一个很简单的例子,但是希望你可以从中找到入门开始使用protobuff的灵感。那么我们开始吧。。。。。。 

直接上代码: 我这里是使用c++进行例子的编写,其实protobuff也支持java和python 原理雷同,这里就不写了

首先是msg.proto

package demo;

message msg
{
required int32 msgtype=1;
required string msginfo=2;
required string msgfrom=3;
optional string opt=4; //can select
}


之后我们  protoc --cpp_out=. msg.proto

使用protoc 编译器生成对应的msg.pb.h和msg.pb.cc文件

下来我们就要编写自己的代码了:

protobuff_demo.cc文件

#include"msg.pb.h"
#include<iostream>
#include<string>
using namespace std;

int main(int argc,char *argv[])
{
demo::msg writer;
writer.set_msgtype(1);
writer.set_msginfo("i am weeks");
writer.set_msgfrom("127.0.0.1");

//C++string序列化和序列化API

//客户端格式化信息
string in_data;
writer.SerializeToString(&in_data);
//下面用一个临时的string 表示在网络中进行传输的过程
//真是的过程中你可以借助相应的网络框架对数据进行传输
//客户端将数据放到网络上
string tmp=in_data;

//服务端从网络上拿数据
string out_data=tmp;
//服务端反格式化信息
demo::msg reader;
reader.ParseFromString(out_data);
cout<<"msg_type: "<<reader.msgtype()<<endl;
cout<<"msg_info: "<<reader.msginfo()<<endl;
cout<<"msg_from: "<<reader.msgfrom()<<endl;

return 0;
}
之后用g++将 msg.pb.cc文件 和protobuff_demo.cc文件生成一个可执行文件就可以了。

下来给大家一个链接是ProtoBuf 常用序列化/反序列化API

http://blog.csdn.net/sealyao/article/details/6940245
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐