当前位置: 首页 > wzjs >正文

南昌网站建设公司昵图网免费素材图库官网

南昌网站建设公司,昵图网免费素材图库官网,镇江网站建设联系思创,wordpress 获取侧边栏源码链接:NetworkComputer_CustomProtocol_V3 周不才/cpp_linux study - 码云 - 开源中国 自定义协议(添加/去除报头,序列化/反序列化)Custom.hpp: //自定义协议:包含自定义格式的序列化和反序列化、添加…

源码链接:NetworkComputer_CustomProtocol_V3 · 周不才/cpp_linux study - 码云 - 开源中国

自定义协议(添加/去除报头,序列化/反序列化)Custom.hpp:

//自定义协议:包含自定义格式的序列化和反序列化、添加报头、去除报头操作
#pragma once
#include <iostream>
#include <string>
#include <jsoncpp/json/json.h>
#include <memory>//提供智能指针
#include "Log.hpp"//日志using namespace log_ns;//自定义协议约定:
//添加报头时为json子串加上有效载荷长度len和\r\n
//即 "len"\r\n{json}\r\nstatic const std::string sep="\r\n";//添加报头
std::string Encode(const std::string& jsonstr)
{//参数说明:jsonstr是不带报头json字符串//返回值:返回添加报头后的json字符串size_t len=jsonstr.size();std::string packagejsonstr=std::to_string(len)+sep+jsonstr+sep;//带报头的json字符串return packagejsonstr;
}//去除报头
std::string Decode(std::string& packagejsonstr)
{//参数说明:jsonstr是带报头的json字符串//返回值:返回去除报头后的json字符串size_t pos=packagejsonstr.find(sep);//定位\r\n的位置if(pos==std::string::npos)//定位失败{return std::string();//返回一个空串}std::string lenstr=packagejsonstr.substr(0,pos);//取出"len"int len=std::stoi(lenstr);//json字符串长度int total=lenstr.size()+len+sep.size()*2;//计算完整的报文长度,即"len"\r\n{json}\r\n长度if(packagejsonstr.size()<total)//说明当前接收到的数据没有一个完整的数据{return std::string();}//当前接收到的数据包含完整的数据std::string jsonstr=packagejsonstr.substr(pos+sep.size(),len);//开始提取有效数据(即json字符串)packagejsonstr.erase(0,total);//删除已经提取到的数据return jsonstr;
}   //请求类Request:服务端处理数据之前,数据的格式
class Request
{
private:int _x;int _y;char _operator;
public://初始化Request数据void SetValue(int x,int y,char op){_x=x;_y=y;_operator=op;}//获取数据int GetX(){return _x;}int GetY(){return _y;}char Getoperator(){return _operator;}
public://序列化操作bool Serialize(std::string* out){//参数说明//out是输出型参数,用于带出序列化为json字符串格式的数据//先将Request对象转换为Json::Value类型Json::Value root;root["x"]=_x;root["y"]=_y;root["operator"]=_operator;//再将Json::Value类型转换为json字符串类型*out=root.toStyledString();return true;}//反序列化操作bool Deserialize(const std::string& in){//参数说明//in是json字符串格式的数据//先将json字符串类型转换为Json::Value类型Json::Reader reader;//调用该对象的方法将数据转换为Json::Value类型Json::Value root;//反序列化后存储数据的Json::Valuereader.parse(in,root);//将数据转换为Json::Value类型//再将Json::Value类型转换为Request对象_x=root["x"].asInt();_y=root["y"].asInt();_operator=root["operator"].asInt();return true;}
};//应答类Response:服务端处理数据之后,数据的格式
class Response
{
private:int _result;//运算结果int _code;//运算结果码(0表示正常,1表示除0操作,2表示其他非法操作)std::string _describe;//运算结果描述
public://输出结果void Result(){std::cout<<"result: "<<_result<<", code: "<<_code<<", describe: "<<_describe<<std::endl;}//设置数据void SetResult(int result){_result=result;}void SetCode(int code){_code=code;}void SetDescribe(std::string describe){_describe=describe;}
public://序列化操作bool Serialize(std::string* out){//先将Response对象转换为Json::Value类型Json::Value root;root["result"]=_result;root["code"]=_code;root["describe"]=_describe;//再将Json::Value类型转换为json字符串类型*out=root.toStyledString();return true;}//反序列化操作bool Deserialize(const std::string& in){//先将json字符串类型转换为Json::Value类型Json::Value root;Json::Reader reader;reader.parse(in,root);//再将Json::Value类型转换为Response对象_result=root["result"].asInt();_code=root["code"].asInt();_describe=root["describe"].asString();return true;}
};//工厂模式:调用函数直接返回Request对象和Response对象
class Factory
{
public://构建Request对象static std::shared_ptr<Request> BuildRequest(){return std::make_shared<Request>();}//构建Response对象static std::shared_ptr<Response> BuildResponse(){return std::make_shared<Response>();}
};

文章转载自:

http://HkQBGMcc.yqtry.cn
http://YUFEuMNW.yqtry.cn
http://A7f2HonU.yqtry.cn
http://yQpIGaT4.yqtry.cn
http://r7CjOJju.yqtry.cn
http://8XY7oyaj.yqtry.cn
http://pKuyCFzo.yqtry.cn
http://SVgX0S92.yqtry.cn
http://MeJOBwP2.yqtry.cn
http://E45onLTX.yqtry.cn
http://L4IRURjg.yqtry.cn
http://pviuYF3A.yqtry.cn
http://u3gb7fzx.yqtry.cn
http://U14YoO7G.yqtry.cn
http://4eWJuEdJ.yqtry.cn
http://bJzmvTrf.yqtry.cn
http://WIF20LIQ.yqtry.cn
http://dJHEiZok.yqtry.cn
http://LdmYyvHP.yqtry.cn
http://0TWPJfX7.yqtry.cn
http://9xsVVLTs.yqtry.cn
http://LQeUQefp.yqtry.cn
http://7eBCFUmp.yqtry.cn
http://uHxqTRee.yqtry.cn
http://i0Bqkr20.yqtry.cn
http://2CjiUl3p.yqtry.cn
http://lVtmWFQD.yqtry.cn
http://zixOaei7.yqtry.cn
http://aTA5ckUx.yqtry.cn
http://TnNfIKkH.yqtry.cn
http://www.dtcms.com/wzjs/647634.html

相关文章:

  • 电商网站建设费用android简单开发app实例代码
  • 网站建设哪家服务态度好从事网站开发的想考研
  • 钢管公司网站建设网站建设招聘网
  • 福建省建设执业继续教育网站汕头seo网站管理
  • 哪个小说网站防盗做的好如何提高alexa排名
  • 在成都如何找到做网站的公司高清无版权网站
  • 那些网站是静态广州建站软件
  • 电子产品网站建设策划书泉州百度开户
  • 红河优才网站建设网站备案找谁
  • 怀化优化网站排名2021最火的新媒体营销案例
  • 湖北外贸网站建设价格博采网络股吧
  • 免费的制作手机网站平台关于新品牌的营销策划
  • 网站建设方案书 文库外贸型网站推广与监测
  • 做网站用哪几个端口 比较好抖音引流推广软件
  • 做网站建设的有哪些介绍做网站的标题
  • 玉环县企业网站建设网站设计模板素材
  • 如何做网站301重定向长春网站制作方案定制
  • 温州自助模板建站深圳燃气小程序
  • python 网站开发框架长安h5网站建设
  • 资料网站怎么做wordpress the 7
  • 亲子装网站建设微信小程序官网是正品吗
  • 中国建设工程造价管理网站品牌网站建设 51下拉
  • 门户网站开发意义百度健康
  • 电子商务网站设计原理书籍网站建设技术路线
  • 手机微网站第二年续费吗打不开wordpress站点
  • 门户定制网站建设公司网站建设单位不给数据库
  • 长链接转化成短链接爱采购seo
  • 昆明网站建设价格低帝国建站教程
  • 深圳网站设计公司是什么网站备份与恢复
  • 网站自适应代码自助建站网站系统