C++ 网络编程实战:构建 JSON+HTTP Web 服务器
序列化基础与 JSON 引入
在 TCP 通信中,由于字节流特性,发送数据前通常需要定义结构化容器。直接传输内存字节会面临字节序和内存对齐问题,因此需要序列化来屏蔽平台差异。
文本序列化(如 JSON)将数据转换为字符串,可读性高但体积较大;二进制序列化(如 Protobuf)体积小但解析复杂。本文采用 JSON 格式,它源于 JavaScript,支持跨语言、跨平台的数据交换。
nlohmann/json 库使用
实际开发中推荐使用成熟的第三方库,如 json.hpp (nlohmann/json)。
对象与数组初始化
#include "json.hpp"
#include <iostream>
int main() {
// 列表初始化
nlohmann::json j = {{"name", "WZ"}, {"age", 20}};
// 推荐方式:使用赋值运算符
nlohmann::json j2;
j2["name"] = "Alice";
j2["score"] = 95.5;
std::cout << j.dump(2) << std::endl; // dump(2) 表示缩进 2 格
return 0;
}
序列化与反序列化
- 序列化:调用
dump()成员函数,返回std::string。 - 反序列化:使用静态方法
parse(),配合 C++11 原始字符串字面量R"()"可避免转义麻烦。
std::string s = R"({"msg": "Hello", "id": 123})";
nlohmann::json j = nlohmann::json::parse(s);
HTTP 协议详解
HTTP 是基于 TCP 的应用层协议,定义了请求与响应的报文格式。
URL 与域名解析
URL 包含协议、域名、端口、路径等。浏览器输入网址后,需通过 DNS 将域名解析为 IP 地址才能建立连接。
请求报文结构
请求报文由四部分组成:


