一个包含HTTP服务器、FTP服务器和客户端的综合性计算机网络实习项目。
A comprehensive computer network internship project including HTTP server, FTP server and client implementations.
- 🌐 Web文件管理系统 - 基于浏览器的文件上传、下载、目录管理
- 🕷️ 网络爬虫功能 - 爬取网页内容,提取文本和图像
- 📁 目录操作 - 创建、删除目录和文件
- 🔄 实时文件列表 - 动态显示服务器文件结构
- 🛡️ 安全防护 - 路径穿越攻击防护
- 👥 多用户认证 - 支持多个预定义用户账户
- 🔀 多线程处理 - 并发处理多个客户端连接
- 📂 完整FTP功能 - 支持PASV模式、文件传输、目录操作
- 🔒 标准FTP协议 - 兼容标准FTP客户端
- 💬 交互式命令行 - 友好的shell界面
- 📥📤 文件传输 - 上传下载文件
- 🗂️ 目录导航 - 浏览和管理远程目录
- ❓ 内置帮助 - 完整的命令说明
- 操作系统: Linux/Unix (使用POSIX socket API)
- 编译器: GCC 或兼容的C编译器
- 依赖库:
libcurl(用于HTTP服务器的网络爬虫功能)pthread(用于FTP服务器的多线程)- 标准C库和POSIX系统调用
sudo apt-get update
sudo apt-get install build-essential libcurl4-openssl-devsudo yum install gcc libcurl-devel
# 或在较新版本中:
sudo dnf install gcc libcurl-devel使用提供的Makefile编译所有组件:
# 编译所有程序
make
# 或分别编译
make http_server # HTTP服务器
make ftp_server # FTP服务器
make ftp_client # FTP客户端
# 清理编译文件
make clean手动编译命令:
# HTTP服务器 (需要libcurl)
gcc -o server server.c -lcurl -lm
# FTP服务器 (需要pthread)
gcc -o ftp_server ftp_server.c -lpthread
# FTP客户端
gcc -o ftp_client ftp_client.c启动HTTP服务器:
./server服务器将在 http://localhost:8080 启动,自动创建以下目录结构:
web_root/
├── index.html # Web界面
├── upload_dir/ # 文件上传目录
└── crawl_result/ # 爬虫结果目录
Web界面功能:
- 📤 文件上传 - 支持多文件同时上传
- 📁 目录管理 - 创建和删除目录
- 🕷️ 网页爬虫 - 输入URL爬取内容
- 📋 文件浏览 - 实时查看文件列表
- 📥 文件下载 - 下载服务器文件
启动FTP服务器:
./ftp_server服务器在端口 2121 监听连接。
预定义用户账户:
| 用户名 | 密码 |
|---|---|
| user1 | pass1 |
| user2 | pass2 |
| user3 | pass3 |
连接FTP服务器:
./ftp_client <服务器IP> <端口>
# 例如: ./ftp_client 127.0.0.1 2121支持的FTP命令:
pwd- 显示当前目录dir- 列出文件和目录cd <目录>- 切换目录mkdir <目录名>- 创建目录rmdir <目录名>- 删除目录get <文件名>- 下载文件put <文件名>- 上传文件?- 显示帮助quit- 退出客户端
Computer_Network_Internship/
├── server.c # HTTP Web服务器源码
├── ftp_server.c # FTP服务器源码
├── ftp_client.c # FTP客户端源码
├── index.html # Web管理界面
├── Makefile # 编译配置
├── README.md # 项目说明文档
├── LICENSE # MIT许可证
└── docs/ # 文档目录
└── screenshots/ # 项目截图
- 协议: HTTP/1.1
- 端口: 8080
- 请求方法: GET, POST
- 内容类型: 支持文件上传(multipart/form-data)
- 特殊端点:
GET /- Web管理界面POST /upload- 文件上传POST /mkdir- 创建目录POST /delete- 删除文件/目录POST /crawl- 网页爬虫GET /files- 文件列表APIGET /download?f=<文件路径>- 文件下载
- 协议: FTP (RFC 959)
- 端口: 2121 (控制端口)
- 数据传输: PASV被动模式
- 认证: 用户名/密码验证
- 支持命令: USER, PASS, PWD, CWD, MKD, RMD, PASV, LIST, RETR, STOR, QUIT
# 启动服务器
./server
# 在浏览器中访问
http://localhost:8080
# 或使用curl测试API
curl -X GET http://localhost:8080/files
curl -X POST -F "url=https://example.com" http://localhost:8080/crawl# 终端1: 启动FTP服务器
./ftp_server
# 终端2: 启动FTP客户端
./ftp_client 127.0.0.1 2121
# 输入用户名: user1
# 输入密码: pass1
# 或使用标准FTP客户端
ftp localhost 2121-
编译错误: "curl/curl.h: No such file"
sudo apt-get install libcurl4-openssl-dev # Ubuntu/Debian sudo yum install libcurl-devel # CentOS/RHEL
-
运行时错误: "Address already in use"
# 检查端口占用 netstat -tulpn | grep :8080 netstat -tulpn | grep :2121 # 终止占用端口的进程 sudo pkill -f server sudo pkill -f ftp_server
-
权限错误
# 确保有执行权限 chmod +x server ftp_server ftp_client # 确保有写入权限 mkdir -p web_root/upload_dir web_root/crawl_result chmod 755 web_root web_root/upload_dir web_root/crawl_result
-
FTP客户端连接失败
- 检查FTP服务器是否在运行
- 确认端口号正确(默认2121)
- 验证用户名密码(user1/pass1, user2/pass2, user3/pass3)
欢迎贡献代码! 请遵循以下步骤:
- Fork本项目
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送分支 (
git push origin feature/AmazingFeature) - 创建Pull Request
本项目采用MIT许可证 - 查看 LICENSE 文件了解详情。
通过此项目,学生将学习和实践:
- 网络编程基础 - Socket API, TCP/IP协议栈
- HTTP协议实现 - 请求解析、响应生成、状态码处理
- FTP协议实现 - 控制连接、数据连接、被动模式
- 多线程编程 - pthread库使用、线程同步
- 文件系统操作 - 文件IO、目录遍历、权限管理
- Web开发基础 - HTML表单、JavaScript、文件上传
- 网络爬虫技术 - HTTP客户端、HTML解析、正则表达式
- 系统编程 - 信号处理、错误处理、资源管理
如有问题或建议,请通过以下方式联系:
- 📧 创建Issue在本仓库
- 📝 查看项目Wiki获取更多信息
⭐ 如果这个项目对你有帮助,请给个星标支持! / If this project helps you, please give it a star!