Skip to content

A comprehensive computer network internship project including HTTP server, FTP server and client implementations.

License

Notifications You must be signed in to change notification settings

SinceraXY/Computer_Network_Internship

Repository files navigation

计算机网络实习项目 / Computer Network Internship Project

License: MIT [Language: C] [Platform: Linux]

一个包含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安装依赖:

sudo apt-get update
sudo apt-get install build-essential libcurl4-openssl-dev

CentOS/RHEL安装依赖:

sudo yum install gcc libcurl-devel
# 或在较新版本中:
sudo dnf install gcc libcurl-devel

🔧 编译 / Build

使用提供的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

🚀 使用方法 / Usage

1. HTTP Web服务器

启动HTTP服务器:

./server

服务器将在 http://localhost:8080 启动,自动创建以下目录结构:

web_root/
├── index.html          # Web界面
├── upload_dir/         # 文件上传目录
└── crawl_result/       # 爬虫结果目录

Web界面功能:

  • 📤 文件上传 - 支持多文件同时上传
  • 📁 目录管理 - 创建和删除目录
  • 🕷️ 网页爬虫 - 输入URL爬取内容
  • 📋 文件浏览 - 实时查看文件列表
  • 📥 文件下载 - 下载服务器文件

2. FTP服务器

启动FTP服务器:

./ftp_server

服务器在端口 2121 监听连接。

预定义用户账户:

用户名 密码
user1 pass1
user2 pass2
user3 pass3

3. FTP客户端

连接FTP服务器:

./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服务器测试

# 启动服务器
./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服务器测试

# 终端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"

    sudo apt-get install libcurl4-openssl-dev  # Ubuntu/Debian
    sudo yum install libcurl-devel             # CentOS/RHEL
  2. 运行时错误: "Address already in use"

    # 检查端口占用
    netstat -tulpn | grep :8080
    netstat -tulpn | grep :2121
    
    # 终止占用端口的进程
    sudo pkill -f server
    sudo pkill -f ftp_server
  3. 权限错误

    # 确保有执行权限
    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 文件了解详情。

🎓 学习目标 / 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!

About

A comprehensive computer network internship project including HTTP server, FTP server and client implementations.

Resources

License

Contributing

Stars

Watchers

Forks