Protocol Buffers(protobuf)是Google提供的一个开源序列化框架,类似XML,JSON,其最大的特点是基于二进制,比传统的XML表示同样一段内容要短小得多。虽然是二进制数据格式,但并没有因此变得复杂,开发人员通过按照一定的语法定义结构化的消息格式,然后送给命令行工具,工具将自动生成相关的类,可以支持c++、java、python等语言环境。通过将这些类包含在项目中,可以很轻松的调用相关方法来完成业务消息的序列化与反序列化工作。
下面将说明如何在windows下VC++使用protobuf
一、前期准备
1、下载protobuf源代码,有两种方式选择:
源代码包地址:https://protobuf.googlecode.com/files/protobuf-2.5.0.zip
svn地址:http://protobuf.googlecode.com/svn/trunk/
二、编译protobuf
1、进入vsprojects目录,执行extract_includes.bat 提取项目头文件
这时候当前目录会生成include目录
2、打开项目文件protobuf.sln,编译libprotobuf 和 protoc
这时候编译目录会生成libprotobuf.lib和protoc.exe
注意了,debug编译后的文件用于debug项目,release编译后的文件用于release项目,否则会出错。
/******** 无情的分割线 ********* /
作者:没有开花的树
博客:blog.csdn.net/mycwq
/ ******* 无情的copy *********/
三、在项目中使用protobuf
1、新建一个win32 控制台应用程序,命名为pbtest
2、把上面的include目录、libprotobuf.lib和protoc.exe放到工程目录下
3、写一个proto文件,保存为person.proto,代码如下:
message Person {
required int32 id = 1;
required string name = 2;
optional string email = 3;
}
4、写一个批处理文件,保存为build.bat,代码如下:
protoc --cpp_out=./ person.proto
5、运行批处理build.bat,生成proto协议文件person.pb.h和person.pb.cc,加到项目中
6、修改项目属性,VC++ 目录的包含目录添加“include”
7、修改pbtest.cpp文件,代码如下:
#include <iostream>
#include <fstream>
#include <string>
#include "person.pb.h"
using namespace std;
#pragma comment(lib, "libprotobuf.lib")
int main(int argc, char* argv[])
{
//校验协议版本
GOOGLE_PROTOBUF_VERIFY_VERSION;
Person person;
//将数据写到person.pb文件
person.set_id(123);
person.set_name("Bob");
person.set_email("bob@example.com");
fstream out("person.pb", ios::out | ios::binary | ios::trunc);
person.SerializeToOstream(&out);
out.close();
//从person.pb文件读取数据
fstream in("person.pb", ios::in | ios::binary);
if (!person.ParseFromIstream(&in)) {
cerr << "Failed to parse person.pb." << endl;
exit(1);
}
cout << "ID: " << person.id() << endl;
cout << "name: " << person.name() << endl;
if (person.has_email()) {
cout << "e-mail: " << person.email() << endl;
}
getchar();
return 0;
}
8、编译项目,效果如下:

demo下载:http://download.csdn.net/detail/cwqcwk1/6810611
参考:
http://blog.csdn.net/mycwq/article/details/17606527
分享到:
相关推荐
Protocol Buffers(protobuf)是Google提供的一个开源序列化框架,这个demo将演示如何在Windows下VC++使用protobuf 配套文章地址:http://blog.csdn.net/mycwq/article/details/17606527
1. 安装protobuf:下载并安装protobuf的Windows版本,确保包括`protoc.exe`编译器和C++库。 2. 编译.proto文件:使用`protoc`将.proto文件转换为C++源代码,生成`.h`和`.cc`文件。命令行可能如下: ``` protoc --...
标题 "grpc protobuf windows vs2015" 涉及的是在Windows环境下,使用Visual Studio 2015(VS2015)开发基于gRPC和Protocol Buffers(protobuf)的应用程序。gRPC是一个高性能、开源和通用的RPC框架,而protobuf是...
ZeroMQ是一种基于消息队列的多线程网络库,其对套接字类型、连接处理、帧、甚至路由的底层细节进行抽象,提供跨越多种传输协议的套接字。ZeroMQ是网络通信中新的一层,介于应用层和传输层之间(按照TCP/IP划分),其...
VC++是微软提供的一个强大的C++集成开发环境,它支持Windows平台下的应用程序开发,包括桌面应用、游戏、服务器端软件等。在这个即时通讯项目中,开发者可能利用了VC++的MFC(Microsoft Foundation Classes)库或者...
4. **用户界面设计**:QQ聊天界面需要有用户友好的交互性,因此开发者需要熟练使用MFC(Microsoft Foundation Classes)框架或Windows API来创建窗口、按钮、文本框等控件,并处理各种用户输入事件。 5. **数据序列...
VC++可能使用标准库如`<sstream>`或第三方库如protobuf进行序列化操作。 5. **事件驱动编程**:聊天程序需要实时响应用户的输入和网络事件,这通常通过事件驱动编程模型实现,如Windows的消息队列和消息循环。 6. ...
"VC++实现QQ聊天源代码"这个标题揭示了我们即将探讨的是一个使用Visual C++编程语言编写的QQ聊天应用的源代码。QQ是一款流行的即时通讯软件,而这里的项目则提供了其基本功能的实现,包括客户端和服务器端的代码。 ...
2、Debug下:“包含目录” 里的三个路径改为本项目下的 “\curaengine”、“\curaengine\src”、“\curaengine\protobuf_d \include”, “库目录”里的路径改为本项目下的 “\curaengine\protobuf_d\lib”。 3、...
在Windows环境下,编译OpenCV时可能会遇到的问题包括: 1. 下载预构建的依赖库(如IPP、TBB、Protobuf等)失败。 2. 缺少VC++运行时库。 3. 配置环境变量错误。 而在Ubuntu上,常见问题有: 1. 缺少依赖库(如...
但请注意,直接使用这些文件前,需要确认它们与你的OpenCV版本和系统配置兼容,否则可能会引入其他问题。 为了更系统地解决这个问题,建议按照以下步骤操作: 1. 确认OpenCV库的完整性和版本,确保你下载的是官方...
在VC++中,可以使用Windows API的CreateThread函数,或者C++11及更高版本提供的std::thread库来创建和管理线程。 再者,数据序列化也是必不可少的。为了在网络上传输,对象的数据需要转换为字节流,到达目的地后再...
因此,书中可能会介绍异步I/O模型,如IOCP(I/O完成端口)在Windows下,或者epoll在Linux下的使用,以提高效率。 7. **数据序列化与反序列化**:网络通信中,数据通常需要被转换为字节流进行传输,这就涉及到数据的...
在Windows环境下搭建TensorFlow的GPU版本需要遵循一系列步骤,确保所有必要的组件都正确安装和配置。以下是详细的过程: 首先,确保你的系统上安装了Python 3.5.2版本,这是TensorFlow支持的一个特定版本。请注意,...
例如,可以使用JSON或protobuf等格式将游戏状态对象转化为字符串,再通过网络发送。接收端则需要反序列化恢复原始对象。 7. 错误处理与容错机制:在网络环境中,错误处理非常重要。设计应包括网络连接断开后的重连...
1. **套接字(Sockets)编程**:在Windows环境下,Visual C/C++使用Winsock库来实现套接字编程,它是网络通信的基础。通过创建服务器和客户端套接字,开发者可以构建网络应用,如聊天室、文件传输等。学习如何初始化...