Linux 应用层自定义协议与序列化

文章目录

  • 一、应用层
    • 1、协议
    • 2、序列化 && 反序列化
    • 3、通过Json库进行数据的序列化 && 反序列化
      • Json::Value类
      • Json::Reader类
      • Json::Writer类
  • 二、为什么read、write、recv、send和Tcp支持全双工?
    • 发数据的本质:
    • tcp支持全双工通信的原因:
    • 为什么IO函数要阻塞?
    • 其他:
      • 因为面向字节流,可能读取不了一个完成的请求,那如何保证在主机中保证处理的是一个完整的请求?
      • 因为面向字节流,可能读取不了一个完成的请求,那如何保证在主机中保证处理的是一个完整的请求?

一、应用层

1、协议

  • 协议本质是一种约定。
  • 协议就是双方约定好的结构化数据。

2、序列化 && 反序列化

在用户在网络中发送的信息类型不都是字符串,有可能是整型,浮点数,自定义类型等等,将不同的类型通过网络发送给另外一个客户端,然后进行识别明显是比较困难的,为了解决这种事情,我们把发送的消息进行序列化和反序列化来对信息进行封装和解封。

Linux 应用层自定义协议与序列化_第1张图片

3、通过Json库进行数据的序列化 && 反序列化

Json::Value类

  • operator[]:通过键名或索引访问JSON对象中的元素。
  • append:向JSON数组中添加元素。
  • asStringasIntasFloatasBool等:将Json::Value对象转换为不同的数据类型。
  • type():获取Json::Value对象的类型。
    // 创建一个Json::Value 对象
    Json::Value root;

    // 通过键值访问Json对象元素,如果没有键值对应的元素则新建
    root["name"] = "zhangsan";
    root["age"] = 18;
    root["year" ] = 2024;

    // 向数组中添加键值对
    // 创建一个Json::Value对象,并初始化为数组类型
    Json::Value root(Json::arrayValue);
    // 使用append方法向数组中添加元素
    root.append("Hello"); // 添加一个字符串
    root.append(123);     // 添加一个整数
    root.append(45.67);   // 添加一个浮点数

    // 将Json::Value对象转换为不同的数据类型
    // asString、asInt、asFloat、asBool等
    int age = root["age"

你可能感兴趣的:(Linux,linux)