Maye NetWork 是一系列 C/C++ 编写的基于 Windows 的网络代码库,用于创建可在 C/C++ 中调用的工具库。
NetWork/
├── tcpSocket/ # TCP Socket 封装库(公共依赖)
│ ├── include/ # 头文件目录
│ ├── lib/ # 编译好的静态库
│ └── source/ # 源文件目录
├── CHttp/ # HTTP 服务器项目(使用 tcpSocket 静态库)
│ ├── zcMaye/ # 网站资源目录
│ ├── WebServer/ # 编译输出目录
│ ├── CHttp.c # HTTP 核心处理逻辑
│ ├── CHttp.h # HTTP 头文件
│ ├── main.c # 主入口
│ └── CHttp.vcxproj # VS 项目文件
├── CHttp - 副本/ # HTTP 服务器项目(内置 tcpSocket 源码)
│ ├── zcMaye/ # 网站资源目录
│ ├── WebServer/ # 编译输出目录
│ ├── CHttp.c # HTTP 核心处理逻辑
│ ├── CHttp.h # HTTP 头文件
│ ├── main.c # 主入口
│ ├── tcpSocket.c # 内置的 TCP Socket 实现
│ ├── tcpSocket.h # 内置的 TCP Socket 头文件
│ ├── CHttp.sln # VS 解决方案文件
│ └── CHttp.vcxproj # VS 项目文件
├── CFtp/ # FTP 客户端项目
├── CFtpClient/ # FTP 客户端测试项目
├── CFtpServer/ # FTP 服务端测试项目
├── CSmtp/ # SMTP 邮件发送项目
├── MayeFtp/ # 完整 FTP 服务器项目
└── NetWork.sln # 总解决方案文件
- Windows 操作系统
- Visual Studio(建议 2017 或更高版本)
- Windows SDK(已随 Visual Studio 安装)
- 克隆仓库
git clone https://github.com/zcmaye/NetWork.git
cd NetWork- 打开解决方案
双击 NetWork.sln 文件,使用 Visual Studio 打开。
- 设置启动项目
在解决方案资源管理器中,右键单击需要运行的项目,选择「设为启动项目」。
- 编译运行
按 F5 键编译并运行项目。
TCP Socket 封装库,提供跨平台的 Socket 操作接口。
核心函数:
| 函数名 | 功能 | 参数 | 返回值 |
|---|---|---|---|
init_Socket() |
初始化 Windows Socket 库 | 无 | bool - 是否成功 |
close_Socket() |
关闭 Windows Socket 库 | 无 | bool - 是否成功 |
create_serverSocket(port) |
创建服务器 Socket | port - 监听端口 |
SOCKET - 服务器套接字 |
create_clientSocket(ip, port) |
创建客户端 Socket | ip - 服务器地址,port - 端口 |
SOCKET - 客户端套接字 |
C 语言实现的轻量级 HTTP 服务器,支持静态文件服务。
核心功能:
- HTTP GET 请求处理
- 静态文件服务(HTML、CSS、图片、下载文件)
- 404 错误处理
- 支持多种 Content-Type
使用方式:
- 将网站资源放入
zcMaye/目录 - 编译运行,服务器监听 80 端口
- 在浏览器中访问
http://127.0.0.1
支持的文件类型:
.html- text/html.css- text/css.xml- text/xml.png- image/apng.gif- image/gif.jpg/.jpeg- image/jpeg.json- application/json.pdf- application/pdf.exe/.zip/.7z/.gz/.tar- application/octet-stream
C 语言实现的 FTP 文件传输系统。
C 语言邮件发送系统。
| 对比项 | CHttp | CHttp-副本 |
|---|---|---|
| tcpSocket 依赖方式 | 使用外部静态库 TcpSocket.lib |
内置 tcpSocket.c 和 tcpSocket.h 源码 |
| main.c 链接方式 | 通过 #pragma comment(lib,"TcpSocket.lib") 链接 |
无需外部库,直接编译 |
| 解决方案文件 | 无独立 sln,依赖 NetWork.sln |
有独立的 CHttp.sln |
| 代码内容 | CHttp.c、CHttp.h、main.c |
CHttp.c、CHttp.h、main.c、tcpSocket.c、tcpSocket.h |
| include 方式 | #include<tcpSocket.h>(尖括号,系统路径搜索) |
#include"tcpSocket.h"(双引号,当前目录搜索) |
| 编译前提 | 需先编译 tcpSocket 项目生成静态库 |
可独立编译,无需其他项目 |
| 适用场景 | 正式开发,便于维护和复用 | 独立部署,无需依赖其他项目 |
浏览器请求 → Socket 接收 → HTTP 解析 → 文件查找 → HTTP 响应 → Socket 发送
↓ ↓ ↓ ↓ ↓ ↓
TCP连接 readLine() getMothedAndUrl() stat() headers() send()
↓
accept_request()
- 服务器初始化:调用
init_Socket()初始化网络库 - 创建监听:调用
create_serverSocket(80)在 80 端口监听 - 接收连接:循环调用
accept()接收客户端连接 - 处理请求:调用
accept_request()解析 HTTP 请求并响应 - 发送响应:通过
headers()和send_file()发送 HTTP 响应
在 CHttp.c 的 getConentType() 函数中添加新的文件后缀判断:
else if (stricmp(beg, ".your_ext") == 0)
{
return "content/type";
}修改 CHttp.c 的 accept_request() 函数中的 resPath 变量:
char resPath[128] = "./your_directory";- 端口占用:确保 80 端口未被其他程序占用
- 资源路径:网站资源必须放在
zcMaye/目录下 - 文件权限:确保程序有读取文件的权限
- 内存管理:当前实现未使用线程池,并发性能有限
MIT License