资源简介
一个c++使用protobuf作为消息协议的一个小demo,从这个demo里你可以很好地理解进行socket编程中的数据包的设计以及数据的打包和解包。
代码片段和文件信息
//
// main.cpp
// ProtoBuf
//
// Created by yangdamin on 3/25/15.
// Copyright (c) 2015 yangdamin. All rights reserved.
//
#include
#include
#include
#include
#include “person.pb.h“
#include “test.pb.h“
using namespace std;
class ProtoMsgHandle
{
public:
/* 注册消息处理函数 */
void initHandles()
{
registerHandle(&ProtoMsgHandle::handleProtoPerson);
registerHandle(&ProtoMsgHandle::handleProtoTest);
}
/* 处理网络消息
* data 为一个完整的数据包
*/
void handle(const char* data)
{
bool ret = false;
const char * current=data;
//在网络上传输的一个数据包总长度
int packetLength=0;
//从第一个位置上获取到数据包总长度
memcpy(&packetLength data sizeof(int32_t));
//指针后移
current+=sizeof(int32_t);
//Message名字的长度
int protoNameLength=0;
//从第二个位置上获取Message的名字的长度
memcpy(&protoNameLength current sizeof(int32_t));
//指针后移
current+=sizeof(int32_t);
//从第三个位置上获取Message的名字
string name(currentprotoNameLength);
//指针后移
current+=protoNameLength;
//取得Message的字节数
int messageSize=packetLength-(sizeof(int32_t)+sizeof(int32_t)+protoNameLength);
do{
msg_handle callback = m_callbacks[name];
assert(callback != NULL);
if(callback == NULL)
{
std::cout<<“proto “< break;
}
const ::google::protobuf::Descriptor* descriptor = m_descriptors[name];
assert(descriptor != NULL);
if(descriptor == NULL)
{
std::cout<<“proto “<riptor“< break;
}
const google::protobuf::Message* prototype = google::protobuf::MessageFactory::generated_factory()->GetPrototype(descriptor);
assert(prototype != NULL);
if(prototype == NULL)
{
std::cout<<“proto “< break;
}
google::protobuf::Message* msg = prototype->New();
ret = msg->ParseFromArray(currentmessageSize);
if(ret)
{
(this->*callback)(msg);
}
else
{
std::cout<<“proto “< }
}while(0);
}
private:
void handleProtoTest(test* test)
{
cout <<“test->price()=“<< test->price() << endl;
cout << “test->userid()=“<userid() << endl;
cout << “test->time()=“<time() << endl;
}
void handleProtoPerson(person* person)
{
cout << “person->age()=“<age() << endl;
cout << “
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2015-03-25 18:27 ProtoBuf\
文件 6148 2015-03-25 18:28 ProtoBuf\.DS_Store
目录 0 2015-03-25 18:32 __MACOSX\
目录 0 2015-03-25 18:32 __MACOSX\ProtoBuf\
文件 120 2015-03-25 18:28 __MACOSX\ProtoBuf\._.DS_Store
目录 0 2015-03-25 18:29 ProtoBuf\.git\
目录 0 2015-03-25 14:32 ProtoBuf\.git\branches\
文件 15 2015-03-25 14:32 ProtoBuf\.git\COMMIT_EDITMSG
文件 137 2015-03-25 14:32 ProtoBuf\.git\config
文件 73 2015-03-25 14:32 ProtoBuf\.git\desc
文件 23 2015-03-25 14:32 ProtoBuf\.git\HEAD
目录 0 2015-03-25 14:32 ProtoBuf\.git\hooks\
文件 452 2015-03-25 14:32 ProtoBuf\.git\hooks\applypatch-msg.sample
文件 896 2015-03-25 14:32 ProtoBuf\.git\hooks\commit-msg.sample
文件 189 2015-03-25 14:32 ProtoBuf\.git\hooks\post-update.sample
文件 398 2015-03-25 14:32 ProtoBuf\.git\hooks\pre-applypatch.sample
文件 1642 2015-03-25 14:32 ProtoBuf\.git\hooks\pre-commit.sample
文件 1352 2015-03-25 14:32 ProtoBuf\.git\hooks\pre-push.sample
文件 4951 2015-03-25 14:32 ProtoBuf\.git\hooks\pre-reba
文件 1239 2015-03-25 14:32 ProtoBuf\.git\hooks\prepare-commit-msg.sample
文件 3611 2015-03-25 14:32 ProtoBuf\.git\hooks\update.sample
文件 1112 2015-03-25 18:27 ProtoBuf\.git\index
目录 0 2015-03-25 14:32 ProtoBuf\.git\info\
文件 40 2015-03-25 14:32 ProtoBuf\.git\info\exclude
目录 0 2015-03-25 18:32 __MACOSX\ProtoBuf\.git\
目录 0 2015-03-25 18:32 __MACOSX\ProtoBuf\.git\info\
文件 171 2015-03-25 14:32 __MACOSX\ProtoBuf\.git\info\._exclude
目录 0 2015-03-25 14:32 ProtoBuf\.git\logs\
文件 183 2015-03-25 14:32 ProtoBuf\.git\logs\HEAD
目录 0 2015-03-25 14:32 ProtoBuf\.git\logs\refs\
目录 0 2015-03-25 14:32 ProtoBuf\.git\logs\refs\heads\
............此处省略70个文件信息
- 上一篇:基于遗传算法的MFC矩形排样UI
- 下一篇:C++ MFC 吹泡泡 源代码
相关资源
- C++ MFC 吹泡泡 源代码
- Microsoft Visual C++ 2013 runtime 64/32 运行库
- libstdc++.so.6.0.23
- Introduction to Design Patterns in C++ with Qt
- 游戏编程代码\\游戏编程学习笔记之九
- 《c++程序设计》谭浩强完整版
- C++ Primer第五版 源代码
- C++沉思录 第2版 经典必读
- c++程序设计 谭浩强176905
- 《VC++网络编程开发与实战光盘》案例
- C++Primer电子书第五版中文版及答案 高
- C++电子书.rar
- 黑马程序员c++配套课件 《轻松搞定
- C++从入门到精通 (第2版).pdf
- Primerc++.pdf
- C++实现CNN识别手写数字
- modbus tcp/rtu客户端服务端通讯程序合集
- 杨淑莹 数字图像处理VC++ 源代码 全
- 李建忠c++设计模式
- C++编写贪吃蛇程序
- C++ 高效 屏幕找图 函数源码
- 无符号数的词法分析程序 C++版
- VC2010中文教学版
- 算法笔记 晴神.zip
- 东南大学计算机复试553C++教材 东南大
- Large Scale C++ Software Design 英文 PDF 扫描
- 从新手到高手C++全方位学习》+源文件
- C++Primer中文版(第4版) PDF + 代码
- UE4离线C++API
- 《C++程序设计原理与实践基础篇+进阶
评论
共有 条评论