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

网页设计与制作模版台州百度推广优化

网页设计与制作模版,台州百度推广优化,企业网络品牌推广,免费站推广网站2022本文首发于 慕雪的寒舍 以tcpServer的计算器服务为例,实现用jsoncpp来进行序列化和反序列化 阅读本文之前,请先阅读 自定义协议 | 序列化和反序列化 | 以tcpServer为例 1.安装jsoncpp 我所用的系统是centos7.6,先用下面的命令查找相关的包 …

本文首发于 慕雪的寒舍

以tcpServer的计算器服务为例,实现用jsoncpp来进行序列化和反序列化

阅读本文之前,请先阅读 自定义协议 | 序列化和反序列化 | 以tcpServer为例

1.安装jsoncpp

我所用的系统是centos7.6,先用下面的命令查找相关的包

sudo yum list | grep jsoncpp-devel

显示出来的包如下

Repository epel is listed more than once in the configuration
jsoncpp-devel.x86_64                0.10.5-2.el7           @epel 

随后安装这个包

sudo yum install jsoncpp

不知道为什么,安装jsoncpp-devel.x86_64显示找不到相关包

或者采用下面的两个命令

sudo yum install epel-release
sudo yum install jsoncpp-devel

如果执行完毕后显示找不到jsoncpp,尝试重新安装epel-release

image-20230404123816637

刚开始我显示epel已经安装,但是找不到jsoncpp这个包,我在重新安装了epel后就能正常安装了

sudo yum rm epel-release
sudo yum install epel-release
sudo yum install jsoncpp-devel

如下图,正常查找到并安装完毕

image-20230404123834144

在centos8下,安装完毕后路径如下

$ ls /usr/include/json
allocator.h  assertions.h  autolink.h  config.h  features.h  forwards.h  json.h  reader.h  value.h  version.h  writer.h

1.1 什么是json?

json是一个kv键值对的序列化方式,每一个key都对应了一个value

{"data": "value"
}

这就有点类似c++中的map,不过json能做的更多

{"data1": "value","data2": {"key1":"value1","key2":"value2","key3":0,"key4":true}
}

json可以在里面嵌套添加更多的内容,不管是字符串还是整形,还能是bool类型的true/false

因为json对反序列化序列化的控制很是不错,可读性也很好,所以被广泛使用!

相比于自己写一个序列化方式,直接用别人的轮子,也不错👻

类似的序列化框架还有xml

2.代码示例

2.1 序列化

相比我们自己写的序列化方式,json的使用简单多了

void serialize(std::string& out)
{//使用jsoncpp的代码Json::Value root;root["x"] = _x;root["y"] = _y;root["op"] = _ops;Json::FastWriter fw; // 这个是写成一行,对于计算机来说处理的负担小// Json::StyledWriter fw; // 这个会进行格式化,更好看(但是内容没差距)out = fw.write(root);
}

对于fw.write(root),其返回值是一个string,也方便我们接收

image-20230212135543386

其中FastWriterStyledWriter有一点区别,如下

//FastWriter
{"data": "value"}
//StyledWriter
{"data": "value"
}

简单来说,StyledWriter会对我们的kv键值对进行格式化,更方便人类的阅读。而FastWriter是直接写成一整行,在传输的时候会方便一点(因为不需要\n

2.2 反序列化

反序列化需要一个Reader来读取字符串,并将其内容根据键值隐射给成员变量

bool deserialize(const std::string &in)
{//jsonJson::Value root;Json::Reader rd;rd.parse(in, root);_x = root["x"].asInt();_y = root["y"].asInt();_ops = root["op"].asInt();
}

3.测试

因为jsoncpp是一个第三方库,我们链接的时候需要加上命令-ljsoncpp

tcpServer:tcpServer.cppg++ -o $@ $^ -std=c++11 -lpthread -ljsoncpp

发送消息后,可以看到,json帮我们格式化为如下形式的字符串

{"op":43,"x":1,"y":200}
{"op":43,"x":333,"y":234}

image-20230212140924067

4.gcc给予宏定义

为了方便对序列化采用的方式进行控制,这里我使用了预处理指令ifdef/endif来进行判断,只要我们在文件头定义了MYPROTOCOL,这里就会采用我们自己的写的序列化方式,否则采用json

#define MYPROTOCOL 1  //如果define了这个,那就使用自己的代码

image-20230212182113854

4.1 命令行

但是在文件里面修改define还是不太方便,我们可以直接采用gcc的命令行参数的方式,进行define的插入(这么做之前,要先删除文件中对MYPROTOCOL的define)

g++ -DMYPROTOCOL tcpServer.cpp -o tcpServer -lpthread -ljsoncpp
g++ -DMYPROTOCOL tcpClient.cpp -o tcpClient -lpthread -ljsoncpp

可以看到,不加编译指令编译出来的服务器,采用的是json的方式来序列化

image-20230212182627766

添加了之后,就是用我们自己写的序列化方式来序列化了

image-20230212182919150

4.2 makefile

因此,我们可以修改makefile来实现这一点

.PHONY:all
all:tcpClient tcpServer
MYSELF=-DMYPROTOCOLtcpClient: tcpClient.cppg++ $(MYSELF) -o $@ $^ -std=c++11 -lpthread -ljsoncpp
tcpServer:tcpServer.cppg++ $(MYSELF) -o $@ $^ -std=c++11 -lpthread -ljsoncpp.PHONY:clean
clean:rm -f tcpClient tcpServer

当我们需要用自己协议的时候,就在最前面加上

MYSELF=-DMYPROTOCOL

否则直接删除这个定义,或者注释掉后面的内容,就能采用jsoncpp

MYSELF=#-DMYPROTOCOL

这样就方便一些了

image-20230212183456024

http://www.yayakq.cn/news/316722/

相关文章:

  • 黄冈网站建设流程嘉兴seo外包公司
  • ppt网站有哪些福田祥菱v1单排
  • 影响网站排名的因素女生wordpress网站适合
  • 深圳企业网站建设公司福州做网站的公司电话
  • 旅行社网站建设需求分析北京建设工程信息网交易平台
  • 平湖公司网站建设wordpress widgets_init
  • 开发企业网站设计惠州网站建设哪里找
  • 巩义网站建设案件数据广州好的网站设计公司
  • 中职学校网站建设情况总结电子商务网站采用的开发技术
  • 网站建设版面分几页合适工作总结加强部门网站建设
  • dede做手机网站新网站怎么做seo优化
  • 建筑公司网站平台ui毕业设计代做网站
  • 用eclipse做网站模板网站的布局结构三种
  • 咸阳做网站电话怎么做盗版网站
  • 空间信息网站附近哪个厂子招工
  • 莞城做网站公司定制建站
  • 网站后台如何登陆凡科网站建设平台好么
  • 网站建设应对客户问题的话术wordpress视频主题吾爱破解
  • 西安购物网站建设百度收录入口在哪里
  • 新网站一般多久收录建筑工程公司注册要求
  • 网站建设技能描述国内产女装一线二线品牌知乎
  • 网站建设好还是阿里巴巴好怎么做qq钓鱼网站
  • 上海网站建设乐云seo药监局网站建设方案
  • 台州网站排名优化费用上海网站建设明细报价表
  • 商业网站的创建程序利用ionic做的网站
  • 北京顺义网站建设企业做网站属于广告宣传费吗
  • 医疗软件网站建设公司阿里云域名备案流程详细
  • 网站突然没收录邢台最新通告今天
  • 做动漫网站的小说网站seo优化报告
  • 网站代更新哈尔滨免费自助建站模板