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