# 标准C语言实现简单Web服务器 **Repository Path**: Crosery/C_web ## Basic Information - **Project Name**: 标准C语言实现简单Web服务器 - **Description**: 本课设任务来自长江大学计算机网络课设任务四! - **Primary Language**: C - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 9 - **Forks**: 0 - **Created**: 2024-06-17 - **Last Updated**: 2025-12-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 标准C语言实现简单Web服务器 本课设任务来自**长江大学**计算机网络课设任务四! 环境需要:**Visual Studio 2022** + **CMake** + **命令行编译** ## 一、项目介绍 ### 📋 任务要求 **设计目标:** 完成基础的tcp连接,支持基础的client与其连接,简单的http访问,支持静态页面访问,需要一定的报错机制,如404页面的建立。 1. socket实现简单Http服务器,完成html的解析; 2. 运行该服务器可以通过浏览器访问服务器目录下的 Html文件、jpg图片、css文件的载入。 完成初步的Http服务器功能。 **相关技术:** Server端: 1. 完成socket(),bind(),listen()这些初始化工作后,调用accept()方法阻塞等待,等待Client的connect()方法连接 2. 处理HTTP请求,解析请求行、请求头,返回相应的静态文件或错误页面 ![1](img/1.png) ## 二、运行截图 **代码实现效果**: ![3](img/3.png) ![4](img/4.png) ## 三、开发环境安装 ### 3.1 Visual Studio 2022 安装(推荐) **下载地址**:[Visual Studio 2022 Community](https://visualstudio.microsoft.com/zh-hans/vs/) ### 3.2 CMake 安装 **下载地址**:[CMake官网](https://cmake.org/download/) **安装步骤**: 1. 下载CMake最新版本的Windows x64 Installer 2. 运行安装程序 3. **重要**:安装时勾选"Add CMake to the system PATH for all users" 4. 完成安装后,打开命令行验证: ```cmd cmake --version ``` ### 3.3 Git 安装(可选) 用于克隆项目代码: **下载地址**:[Git for Windows](https://git-scm.com/download/win) ## 四、项目结构 ``` C_web/ ├── CMakeLists.txt # CMake构建配置文件 ├── README.md # 项目说明文档 │ ├── include/ # 头文件目录 │ ├── src/ # 源代码目录 │ └── main.c # 主程序源文件 │ ├── resources/ # 资源文件目录 │ ├── index.html # 主页HTML文件 │ ├── 404.html # 404错误页面 │ ├── css/ # CSS样式文件目录 │ ├── js/ # JavaScript文件目录 │ ├── img/ # 图片资源目录 │ └── music/ # 音乐资源目录 │ └── img/ # 项目文档图片目录 ``` ## 五、编译与运行 ### 5.1 CMake + 命令行 **步骤**: 1. **打开命令行**: - 按 `Win + R`,输入 `cmd`,回车 - 或在项目文件夹按住 `Shift` 右键,选择"在此处打开PowerShell窗口" 2. **进入项目目录**: ```cmd cd 项目工作目录 ``` 3. **配置项目**(首次运行): ```cmd cmake -B build -S . ``` 4. **编译项目**: ```cmd # Debug版本(默认) cmake --build build # Release版本(性能更好) cmake --build build --config Release ``` 5. **运行程序**: ```cmd # Debug版本 bin\Debug\main.exe # Release版本 bin\Release\main.exe # 指定端口运行 bin\Debug\main.exe 9000 ``` ### 5.2 方式二:GCC命令行编译 **前提**:需要安装MinGW-w64或使用WSL **教程:**[环境搭建 | Windows中MinGW-w64及GCC的下载、安装与配置 - 字节幺零二四 - 博客园](https://www.cnblogs.com/zijie1024/articles/18376803) **编译命令**: ```cmd # 基础编译 gcc -o webserver src/main.c -lws2_32 # 带调试信息 gcc -g -o webserver src/main.c -lws2_32 # 优化编译 gcc -O2 -o webserver src/main.c -lws2_32 # 运行 ./webserver.exe ``` ## 六、快速开始 ### 6.1 第一次运行 1. **下载/克隆项目**: ```cmd git clone https://gitee.com/Crosery/C_web.git cd C_web ``` 2. **选择编译方式**(推荐CMake): ```cmd cmake -B build -S . cmake --build build ``` 3. **将resources文件放进与main.exe的同级目录**: ![2](img/2.png) 4. **运行服务器**: ```cmd bin\Debug\main.exe ``` 5. **访问网站**: - 打开浏览器 - 访问:`http://localhost:8007` ## 七、配置文件 ### 7.1 环境配置文件(.env) 在项目根目录创建 `.env` 文件: ```env # 服务器配置 SERVER_PORT=8007 SERVER_IP_ADDR=0.0.0.0 BACKLOG=10 BUF_SIZE=8192 OK=1 ERROR=0 ``` ### 7.2 CMakeLists.txt 说明 项目已包含完整的CMake配置: ```cmake # CMake最小版本要求 cmake_minimum_required(VERSION 3.20.0) # 项目名称 project(main) # 添加头文件目录 include_directories(${PROJECT_SOURCE_DIR}/include) # 设置可执行文件输出路径 set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) # 自动收集src目录下的所有源文件 aux_source_directory(${PROJECT_SOURCE_DIR}/src SRC_LIST) # 添加可执行文件 add_executable( main ${SRC_LIST} ) ``` ## 八、自定义配置教程 ### 8.1 修改端口配置 **方法一:环境配置文件**(推荐) ```env SERVER_PORT=9999 # 修改为你的端口 ``` **方法二:命令行参数** ```bash bin\Debug\main.exe 9999 ``` **方法三:修改源码** ```c // src/main.c 中修改 int g_server_port = 9999; // 你的端口号 ``` ### 8.2 修改个人信息 **修改服务器作者信息**: 编辑 `src/main.c`,找到 `display_server_logo()` 函数: ```c printf(" Created by 你的姓名\n\n"); ``` **修改网页个人信息**: 编辑 `index.html`,找到个人信息部分: ```html
``` ## 九、常见问题解决 ### 9.1 编译问题 **问题1:cmake不是内部或外部命令** 解决方案: 1. 重新安装CMake,确保勾选"Add to PATH" 2. 重启命令行或重启电脑 3. 手动添加CMake到环境变量PATH **问题2:找不到编译器** 解决方案: 1. 确保安装了Visual Studio 2022的C++工具 2. 在开发者命令提示符中运行CMake: - 开始菜单搜索"Developer Command Prompt for VS 2022" **问题3:链接错误 ws2_32.lib** 解决方案: ```c // 确保代码中包含 #pragma comment(lib,"ws2_32.lib") ``` ### 9.2 运行问题 **问题1:端口被占用** 解决方案: ```bash # 查看端口占用 netstat -ano | findstr :8007 # 更换端口 bin\Debug\main.exe 9000 ``` **问题2:防火墙拦截** 解决方案: 1. Windows Defender → 允许应用通过防火墙 2. 添加main.exe到允许列表 ## 十、日志系统说明 ### 10.1 日志级别和颜色 | 级别 | 颜色 | 用途 | 示例 | | ----------- | ------- | -------- | -------------- | | LOG_INFO | 🔵 蓝色 | 一般信息 | 服务器启动 | | LOG_SUCCESS | 🟢 绿色 | 成功操作 | 文件发送成功 | | LOG_WARNING | 🟡 黄色 | 警告信息 | 配置文件未找到 | | LOG_ERROR | 🔴 红色 | 错误信息 | 文件不存在 | | LOG_DETAIL | 🔷 青色 | 详细信息 | 请求详情 | | LOG_CONFIG | 🟣 紫色 | 配置信息 | 端口配置 | ### 10.2 日志示例输出 ``` ████████████████████████████████████████████████████████ █ █ █ ██╗ ██╗███████╗██████╗ ███████╗██████╗ █ █ ██║ ██║██╔════╝██╔══██╗ ██╔════╝██╔══██╗ █ █ ██║ █╗ ██║█████╗ ██████╔╝ ███████╗██████╔╝ █ █ ██║███╗██║██╔══╝ ██╔══██╗ ╚════██║██╔══██╗ █ █ ╚███╔███╔╝███████╗██████╔╝ ███████║██║ ██║ █ █ ╚══╝╚══╝ ╚══════╝╚═════╝ ╚══════╝╚═╝ ╚═╝ █ █ █ ████████████████████████████████████████████████████████ Created by Crosery ==================== 环境配置加载 ==================== [信息] 正在加载环境变量配置... [配置] 服务器端口: 8007 [配置] 服务器IP: 0.0.0.0 [成功] 环境变量配置加载完成! ====================================================== ==================== 套接字初始化 ==================== [信息] 正在初始化服务器套接字... [成功] Winsock 库加载成功。 [成功] 套接字创建成功。 [成功] 套接字绑定成功,监听于 0.0.0.0:8007 ====================================================== [信息] Web 服务器已启动,监听端口: 8007 [信息] 当前工作目录: F:\Desktop\C_web [信息] 访问 http://localhost:8007 开始使用。 ==================== 服务器运行中 ==================== ``` ## 十一、支持的文件类型 服务器支持以下文件类型的自动MIME类型识别: | 文件类型 | 扩展名 | MIME类型 | | -------- | -------------- | -------------------------- | | 网页文件 | `.html` | `text/html` | | 样式文件 | `.css` | `text/css` | | 脚本文件 | `.js` | `application/javascript` | | 图片文件 | `.jpg/.jpeg` | `image/jpeg` | | 图片文件 | `.png` | `image/png` | | 图片文件 | `.gif` | `image/gif` | | 文本文件 | `.txt` | `text/plain` | | XML文件 | `.xml` | `text/xml` | | JSON文件 | `.json` | `application/json` | | 音频文件 | `.mp3` | `audio/mpeg` |