标准C语言实现简单Web服务器

标准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请求,解析请求行、请求头,返回相应的静态文件或错误页面

二、运行截图

代码实现效果

三、开发环境安装

3.1 Visual Studio 2022 安装(推荐)

下载地址Visual Studio 2022 Community

3.2 CMake 安装

下载地址CMake官网

安装步骤

  1. 下载CMake最新版本的Windows x64 Installer
  2. 运行安装程序
  3. 重要:安装时勾选"Add CMake to the system PATH for all users"
  4. 完成安装后,打开命令行验证:
    cmake --version

3.3 Git 安装(可选)

用于克隆项目代码:

下载地址Git for Windows

四、项目结构

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. 进入项目目录

    cd 项目工作目录
  3. 配置项目(首次运行):

    cmake -B build -S .
  4. 编译项目

    # Debug版本(默认)
    cmake --build build

    # Release版本(性能更好)
    cmake --build build --config Release
  5. 运行程序

    # 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的下载、安装与配置 - 字节幺零二四 - 博客园

编译命令

# 基础编译
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. 下载/克隆项目

    git clone https://gitee.com/Crosery/C_web.git
    cd C_web
  2. 选择编译方式(推荐CMake):

    cmake -B build -S .
    cmake --build build
  3. 将resources文件放进与main.exe的同级目录

  4. 运行服务器

    bin\Debug\main.exe
  5. 访问网站

    • 打开浏览器
    • 访问:http://localhost:8007

七、配置文件

7.1 环境配置文件(.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_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 修改端口配置

方法一:环境配置文件(推荐)

SERVER_PORT=9999  # 修改为你的端口

方法二:命令行参数

bin\Debug\main.exe 9999

方法三:修改源码

// src/main.c 中修改
int g_server_port = 9999; // 你的端口号

8.2 修改个人信息

修改服务器作者信息

编辑 src/main.c,找到 display_server_logo() 函数:

printf("                          Created by 你的姓名\n\n");

修改网页个人信息

编辑 index.html,找到个人信息部分:

<div class="content">
<button class="button" onclick="alert('Ciallo~(∠・ω< )⌒☆')">计算机网络课设</button>
<button class="subtitle-button" onclick="alert('Ciallo~(∠・ω< )⌒☆')">你的姓名</button>
<button class="additional-text" onclick="location.href = 'nonexistent.html';">Ciallo~(∠・ω< )⌒☆</button>
</div>

九、常见问题解决

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

解决方案:

// 确保代码中包含
#pragma comment(lib,"ws2_32.lib")

9.2 运行问题

问题1:端口被占用

解决方案:

# 查看端口占用
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