为grabber和processor之间制定通信协议
来源:互联网 发布:湖南中原数据研究中心 编辑:程序博客网 时间:2024/06/05 20:29
1.首先进入pbdef/netmessage.prqto定义:
ex:
messageEchoProto
{
required string data = 1;
}
2.调用gibbon下的pbgen.sh生成pb文件
文件是在pb文件夹下面。
3.cd protocol目录,实现定义协议字段。
Ex:
public:
EchoProto proto; //暂时不太清楚是什么意思
std::string_marshal_data;
public:
enum
{
PROTOCOL_ID= PROTOCOL_ID_ECHO,//要记得修改
};
Echo(){}
~Echo(){}
virtualconst std::string& Marshal() //这一部分不用修改
{
//1.设置协议具体子段
//2.给协议wrap一层,添加protocolid
CProtocproto;
cproto.set_id(PROTOCOL_ID);
cproto.set_body(proto.SerializeAsString());
std::stringdata;
cproto.SerializeToString(&data);
//3.封包
NetPacketpacket;
packet.header= 0xF0;
packet.tail= 0x0F;
packet.type= 1;
packet.datalen= data.size();
_marshal_data= PacketData(packet, data.c_str());
return_marshal_data;
}
virtualvoid UnMarshal(const char* buf, int length)
{
proto.ParseFromString(std::string(buf,length));
}
//clone函数记得要修改一下
virtual Protocol* Clone()
{
return new Echo();
}
4.cd include在protocolid.h中enum加上PROTOCOL_ID_ECHO
//neum是什么数据类型?uchar?
5.在需要用到协议的模块目录下面加上.hpp文件并在main里面加上hpp
在class里面的process是处理收到内容后的代码。
Ex:
#ifndef _ECHO_H
#define _ECHO_H
#include <string>
#include "protocol.h"
#include "protocolid.h"
#include "net_base.h"
#include "packet_sync.h"
#include "pb/netmessage.pb.h"
#include "tcpserver.h"
class Echo: public Protocol
{
#include "protocol/echo"
virtual void Process(const char* buf, intlength, void* userdata)
{
UnMarshal(buf, length);
LOG_TRACE("Echo|data=%s",proto.data().c_str());
}
};
#endif // end _ECHO_H
6.实现prosess部分。
- 为grabber和processor之间制定通信协议
- 通信协议制定
- 制定通信协议
- 从制定通信协议所想到的......
- 从制定通信协议所想到的......
- 从制定通信协议所想到的......
- 设备通信协议制定的一些误区避免
- 禄来6008机身和镜头之间的通信协议测试
- diy数据库(八)--客户端和服务器之间的通信协议
- 浏览器,服务器,浏览器和服务器之间的通信协议
- peer之间的通信协议
- 处理链和Processor
- post processor和aware
- 为myeclipse制定服务器
- Web.py - processor和hooks
- 为Tomcat制定JDK路径
- 为PHP制定两个VirtualHost
- ATT衰减和通信协议
- CodeForces
- Wannafly挑战赛1【solved : 4 / 5】
- Ubuntu和Windows双系统时间不对的解决办法
- web前端零基础练习特效,鼠标移入移出效果
- 6.1.分析并写出下例程序运行的结果
- 为grabber和processor之间制定通信协议
- MapReduce使用Java代码实现
- Zookeeper 安装、配置、使用
- Android ContentProvider 的简单使用
- Android_OkHttp封装
- Opencv Mat矩阵中data、size、depth、elemSize、step等属性的理解
- 阿里云技术教程系列-ECS远程连接 Linux 实例
- 使用python对高光谱数据进行处理和分类
- [Unity][UGUI]UGUI的饼状统计图