1. 网页前端部分
此部分主要用于测试 HTTP 服务器是否正常运行。结构包含 wwwroot 文件夹,存放图片、404 页面、内容页、首页及登录注册页。由于重点在于服务器后端实现,前端页面细节不再赘述。
2. 服务器后端部分
基础封装类
复用网络地址类、锁类、日志类及 Socket 套接字封装类,这些是构建 TCP/HTTP 服务的基础组件。
TcpServer 类
复用已有的 TCP 服务器封装逻辑,体现范式编程的复用性优势。
Http 服务器类
头文件引入
#pragma once:防止头文件重复包含。#include <iostream>:标准输入输出流。#include <string>:字符串处理。#include <vector>:动态数组容器。#include <sstream>:字符串流转换。#include <functional>:函数对象与绑定器。#include <fstream>:文件流读写。#include <unordered_map>:无序哈希表。
常量定义
base_sep = "\r\n":HTTP 协议换行分隔符。line_sep = ": ":请求/响应头键值分隔符。prefixpath = "wwwroot":静态资源根目录。homepage = "index.html":默认首页。httpversion = "HTTP/1.0":协议版本。spacesep = " ":请求行分隔符。suffixsep = ".":文件名扩展名分隔符。html_404 = "404.html":错误页面。arg_sep = "?":URL 参数分隔符。
HttpRequest 类的编写
成员变量
基本格式相关:
_req_line:存储请求行(如GET /index.html HTTP/1.0)。_req_headers:原始请求头列表。_blank_line:请求头与体的空行分隔。_body_text:请求体内容。
解析后属性:
_method:请求方法(GET/POST)。_url:请求 URL 路径。_path:本地资源实际路径。_suffix:资源后缀名。_version:协议版本。_headers_kv:请求头键值对哈希表。
核心函数
- GetLine:按
\r\n拆分请求字符串,逐行提取内容。


