简易方式
之前我们介绍了通过async_read_some函数监听读事件,并且绑定了读事件的回调函数HandleRead
1 | _socket.async_read_some(boost::asio::buffer(_data, MAX_LENGTH), std::bind(&CSession::HandleRead, this, |
jsoncpp 是一个 C++ JSON 库,它提供了将 JSON 数据解析为 C++ 对象、将 C++ 对象序列化为 JSON 数据的功能。它支持所有主流操作系统(包括 Windows、Linux、Mac OS X 等),并且可以与常见编译器(包括 Visual Studio、GCC 等)兼容。
jsoncpp 库是以源代码的形式发布的,因此使用者需要自己构建和链接库文件。该库文件不依赖于第三方库,只需包含头文件即可使用。
jsoncpp 库的特点包括:
轻量级:JSON 解析器和序列化器都非常快速,不会占用太多的 CPU 和内存资源;
易于使用:提供简单的 API,易于理解和使用;
可靠性高:经过广泛测试,已被许多企业和开发者用于生产环境中;
开源免费:遵循 MIT 许可证发布,使用和修改均免费。
总之,jsoncpp 是一款优秀的 C++ JSON 库,它可以帮助你轻松地处理 JSON 数据,为你的项目带来便利和高效。
Protocol Buffers(简称 Protobuf)是一种轻便高效的序列化数据结构的协议,由 Google 开发。它可以用于将结构化数据序列化到二进制格式,并广泛用于数据存储、通信协议、配置文件等领域。
我们的逻辑是有类等抽象数据构成的,而tcp是面向字节流的,我们需要将类结构序列化为字符串来传输。
官方下载地址
https://github.com/protocolbuffers/protobuf/releases
选择zip文件下载即可
在计算机网络中,由于不同的计算机使用的 CPU 架构和字节顺序可能不同,因此在传输数据时需要对数据的字节序进行统一,以保证数据能够正常传输和解析。这就是网络字节序的作用。
具体来说,计算机内部存储数据的方式有两种:大端序(Big-Endian)和小端序(Little-Endian)。在大端序中,高位字节存储在低地址处,而低位字节存储在高地址处;在小端序中,高位字节存储在高地址处,而低位字节存储在低地址处。
在网络通信过程中,通常使用的是大端序。这是因为早期的网络硬件大多采用了 Motorola 处理器,而 Motorola 处理器使用的是大端序。此外,大多数网络协议规定了网络字节序必须为大端序。
因此,在进行网络编程时,需要将主机字节序转换为网络字节序,也就是将数据从本地字节序转换为大端序。可以使用诸如 htonl、htons、ntohl 和 ntohs 等函数来实现字节序转换操作。
综上所述,网络字节序的主要作用是统一不同计算机间的数据表示方式,以保证数据在网络中的正确传输和解析。