网站的商桥怎么做在线制作动态图片自动生成
网站的商桥怎么做,在线制作动态图片自动生成,网站建设管理工作自查报告,教育培训类网站设计目录
Linux网络
网络模型
系统和网络的关系
协议
报头和报文
信息通过网络传输的过程
传输的过程
序列化和反序列化
JSON格式
序列化
反序列化 只有认知的突破#x1f4ab;才能带来真正的成长#x1f4ab;编程技术的学习#x1f4ab;没有捷径#x1f4ab;一起加…目录Linux网络网络模型系统和网络的关系协议报头和报文信息通过网络传输的过程传输的过程序列化和反序列化JSON格式序列化反序列化只有认知的突破才能带来真正的成长编程技术的学习没有捷径一起加油感谢各位的观看欢迎大家留言咱们一起加油努力成为更好的自己Linux网络网络模型OSI七层网络模型如下图所示。其实落地只有五层模型——TCP/IP五层模型。物理层网卡。数据链路层含有以太网令牌环网无线LAN。功能数据碰撞检测。网络层管理IP。传输层TCP/UDP传输协议。应用层各种应用协议。常用且有名的是http/https协议。系统和网络的关系网络依附于系统其中传输层和网络层被内置到系统内核中了如下图所示的关系。协议在网络的每层模型中都有每层对应的协议每层的协议都是一样的只有这样才能进行完整且正确的通信。协议的本质就是一个个结构体/类。如下所示的代码——请求和响应的协议。#pragma once #include iostream #include string #include jsoncpp/json/json.h class Request { public: Request() { _x _y _oper 0; } // 序列号对象 bool Serialize(std::string *out) { //1. 手写 _x _oper _y --- 字符串拼接转换 //2. 现成工具 Json::Value root; root[x] _x; root[y] _y; root[oper] _oper; Json::StyledWriter writer; *out writer.write(root); if(out-empty()) return false; return true; } // 反序列化对象 bool Deserialize(std::string in) { Json::Reader reader; Json::Value root; bool ret reader.parse(in, root); if(!ret) return false; _x root[x].asInt(); _y root[y].asInt(); _oper root[oper].asInt(); return true; } int X() { return _x; } int Y() { return _y; } char Oper() { return _oper; } ~Request() { } // private: public: // 加快速度 // x oper y -- 约定1 int _x; //请求协议 int _y; char _oper; }; class Response { public: Response():_result(0), _code(0) { } // 序列号对象 bool Serialize(std::string *out) { //1. 手写 _x _oper _y --- 字符串拼接转换 //2. 现成工具 Json::Value root; root[result] _result; root[code] _code; Json::StyledWriter writer; *out writer.write(root); if(out-empty()) return false; return true; } // 反序列化对象 bool Deserialize(std::string in) { Json::Reader reader; Json::Value root; bool ret reader.parse(in, root); if(!ret) return false; _result root[result].asInt(); _code root[code].asInt(); return true; } void SetResult(int r) { _result r; } void SetCode(int c) { _code c; } void Print() { std::cout _result [ _code ] std::endl; } ~Response() { } private: int _result; // //响应协议 int _code; // 可信度 };报头和报文报头报文有效载荷。如下图所示。信息通过网络传输的过程传输的过程序列化和反序列化为什么用序列化和反序列化在一台服务器上使用C语言来定义结构体。但是在另一台服务器上使用Python来定义结构体。虽然两者的结构属性一样但是语言不一样就无法通信。可以把各自传输的协议给转换成字符串把字符串给发送过去在各自的服务器上进行解析这样两者即使语言不同也可以通信了。如下图所示的过程。JSON格式网络传输中进行序列化常常转换为JSON格式的字符串。为此可以使用Jsoncpp库使用该库提供的序列化方法进行序列化。序列化类Json::Value使用该类把属性保存下来。函数toStyledString()把保存属性的对象转为字符串。#include iostream #include jsoncpp/json/json.h #include string int main() { Json::Value root; root[name]lisi; root[age]18; root[sex]男; std::string sroot.toStyledString(); std::coutsstd::endl; return 0; }反序列化反序列化指的是将序列化后的数据重新转换为原来的数据结构或对象。类Json::Reader函数parse()使用它来读取序列化字符串。#include iostream #include jsoncpp/json/json.h #include string int main() { /*序列化*/ Json::Value root; root[name]lisi; root[age]18; root[sex]男; std::string sroot.toStyledString(); /*反序列化*/ Json::Reader read; Json::Value uroot; read.parse(s,uroot); //通过read的parse函数把字符串读到uroot中 std::string nameuroot[name].asString(); int ageuroot[age].asInt(); std::string sexuroot[sex].asString(); std::coutnamestd::endl; std::coutagestd::endl; std::coutsexstd::endl; return 0; }