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

标准C语言实现简单Web服务器
Crosery标准C语言实现简单Web服务器
本课设任务来自长江大学计算机网络课设任务四!
环境需要:Visual Studio 2022 + CMake + 命令行编译
一、项目介绍
📋 任务要求
设计目标:
完成基础的tcp连接,支持基础的client与其连接,简单的http访问,支持静态页面访问,需要一定的报错机制,如404页面的建立。
- socket实现简单Http服务器,完成html的解析;
- 运行该服务器可以通过浏览器访问服务器目录下的 Html文件、jpg图片、css文件的载入。 完成初步的Http服务器功能。
相关技术:
Server端:
- 完成socket(),bind(),listen()这些初始化工作后,调用accept()方法阻塞等待,等待Client的connect()方法连接
- 处理HTTP请求,解析请求行、请求头,返回相应的静态文件或错误页面
二、运行截图
代码实现效果:
三、开发环境安装
3.1 Visual Studio 2022 安装(推荐)
下载地址:Visual Studio 2022 Community
3.2 CMake 安装
下载地址:CMake官网
安装步骤:
- 下载CMake最新版本的Windows x64 Installer
- 运行安装程序
- 重要:安装时勾选"Add CMake to the system PATH for all users"
- 完成安装后,打开命令行验证:
cmake --version
3.3 Git 安装(可选)
用于克隆项目代码:
下载地址:Git for Windows
四、项目结构
C_web/ |
五、编译与运行
5.1 CMake + 命令行
步骤:
打开命令行:
- 按
Win + R
,输入cmd
,回车 - 或在项目文件夹按住
Shift
右键,选择"在此处打开PowerShell窗口"
- 按
进入项目目录:
cd 项目工作目录
配置项目(首次运行):
cmake -B build -S .
编译项目:
# Debug版本(默认)
cmake --build build
# Release版本(性能更好)
cmake --build build --config Release运行程序:
# 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的下载、安装与配置 - 字节幺零二四 - 博客园
编译命令:
# 基础编译 |
六、快速开始
6.1 第一次运行
下载/克隆项目:
git clone https://gitee.com/Crosery/C_web.git
cd C_web选择编译方式(推荐CMake):
cmake -B build -S .
cmake --build build将resources文件放进与main.exe的同级目录:
运行服务器:
bin\Debug\main.exe
访问网站:
- 打开浏览器
- 访问:
http://localhost:8007
七、配置文件
7.1 环境配置文件(.env)
在项目根目录创建 .env
文件:
# 服务器配置 |
7.2 CMakeLists.txt 说明
项目已包含完整的CMake配置:
# CMake最小版本要求 |
八、自定义配置教程
8.1 修改端口配置
方法一:环境配置文件(推荐)
SERVER_PORT=9999 # 修改为你的端口 |
方法二:命令行参数
bin\Debug\main.exe 9999 |
方法三:修改源码
// src/main.c 中修改 |
8.2 修改个人信息
修改服务器作者信息:
编辑 src/main.c
,找到 display_server_logo()
函数:
printf(" Created by 你的姓名\n\n"); |
修改网页个人信息:
编辑 index.html
,找到个人信息部分:
<div class="content"> |
九、常见问题解决
9.1 编译问题
问题1:cmake不是内部或外部命令
解决方案:
- 重新安装CMake,确保勾选"Add to PATH"
- 重启命令行或重启电脑
- 手动添加CMake到环境变量PATH
问题2:找不到编译器
解决方案:
- 确保安装了Visual Studio 2022的C++工具
- 在开发者命令提示符中运行CMake:
- 开始菜单搜索"Developer Command Prompt for VS 2022"
问题3:链接错误 ws2_32.lib
解决方案:
// 确保代码中包含 |
9.2 运行问题
问题1:端口被占用
解决方案:
# 查看端口占用 |
问题2:防火墙拦截
解决方案:
- Windows Defender → 允许应用通过防火墙
- 添加main.exe到允许列表
十、日志系统说明
10.1 日志级别和颜色
级别 | 颜色 | 用途 | 示例 |
---|---|---|---|
LOG_INFO | 🔵 蓝色 | 一般信息 | 服务器启动 |
LOG_SUCCESS | 🟢 绿色 | 成功操作 | 文件发送成功 |
LOG_WARNING | 🟡 黄色 | 警告信息 | 配置文件未找到 |
LOG_ERROR | 🔴 红色 | 错误信息 | 文件不存在 |
LOG_DETAIL | 🔷 青色 | 详细信息 | 请求详情 |
LOG_CONFIG | 🟣 紫色 | 配置信息 | 端口配置 |
10.2 日志示例输出
████████████████████████████████████████████████████████ |
十一、支持的文件类型
服务器支持以下文件类型的自动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 |
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果