FTP 服务器实现 - 计算机网络课程设计
一个基于 Python 的多线程 FTP 服务器实现,支持 Windows 命令行客户端访问。
项目概述
本项目实现了一个功能完整的 FTP 服务器,严格遵循 RFC 959 标准,支持:
- ✅ 多线程并发: 支持多个客户端同时连接
 - ✅ 用户认证: USER/PASS 命令实现用户登录
 - ✅ 目录操作: LIST/DIR 命令显示文件列表
 - ✅ 文件下载: RETR/GET 命令下载文件
 - ✅ 路径导航: PWD/CWD 命令目录切换
 - ✅ 错误处理: 完善的错误响应机制
 - ✅ Windows 兼容: 完全支持 Windows FTP 客户端
 
快速开始
1. 启动 FTP 服务器
python main.py
服务器将在 127.0.0.1:2121 启动(使用非特权端口避免需要管理员权限)。
2. 使用 Windows FTP 客户端连接
打开 Windows 命令提示符:
ftp 127.0.0.1 2121
3. 登录测试
使用以下测试账户:
| 用户名 | 密码 | 
|---|---|
| admin | admin123 | 
| user | password | 
| test | test123 | 
| guest | guest | 
4. 基本操作示例
# 连接服务器
ftp 127.0.0.1 2121
# 登录
User (127.0.0.1:(none)): admin
Password: admin123
# 查看当前目录
ftp> pwd
# 列出文件
ftp> dir
# 下载文件
ftp> get readme.txt
# 切换目录
ftp> cd documents
# 退出
ftp> quit
支持的 FTP 命令
| FTP 命令 | Windows 命令 | 功能描述 | 
|---|---|---|
| USER | USER | 用户身份验证 | 
| PASS | PASS | 密码验证 | 
| LIST | DIR | 详细文件列表 | 
| NLST | LS | 简单文件列表 | 
| RETR | GET | 文件下载 | 
| PWD | PWD | 显示当前目录 | 
| CWD | CD | 改变目录 | 
| PASV | - | 被动模式 | 
| PORT | - | 主动模式 | 
| TYPE | - | 传输类型设置 | 
| SYST | - | 系统信息 | 
| QUIT | QUIT | 退出连接 | 
项目结构
CN-design-ftp/
├── main.py                 # 程序入口点
├── ftp_server.py          # 主服务器类
├── ftp_session.py         # 客户端会话处理
├── config.py              # 服务器配置
├── test_ftp_client.py     # 测试客户端
├── design_report.md       # 详细设计报告
├── README.md              # 项目说明
├── ftp_root/              # FTP 服务器根目录
│   ├── readme.txt         # 服务器说明文件
│   ├── sample.txt         # 示例文本文件
│   ├── data.json          # JSON 数据文件
│   └── documents/         # 子目录示例
│       └── test_doc.txt   # 测试文档
└── test_files/            # 测试文件目录
技术特性
架构设计
- 多线程服务器: 每个客户端连接独立线程处理
 - 模块化设计: 清晰的代码结构和职责分离
 - 配置化管理: 易于修改服务器参数
 
安全特性
- 路径安全: 防止目录遍历攻击
 - 用户认证: 基于用户名/密码的访问控制
 - 错误处理: 全面的异常处理和错误响应
 
协议兼容性
- RFC 959 标准: 严格遵循 FTP 协议规范
 - 双连接模式: 支持控制连接和数据连接
 - 传输模式: 支持被动模式和主动模式
 
测试
自动化测试
运行内置测试脚本:
# 启动服务器(在一个终端)
python main.py
# 运行测试(在另一个终端)
python test_ftp_client.py
手动测试
- 
基本连接测试
telnet 127.0.0.1 2121 - 
FTP 客户端测试
ftp 127.0.0.1 2121 - 
并发测试
- 同时打开多个 FTP 客户端连接
 - 验证多用户并发访问
 
 
配置说明
编辑 config.py 文件可以修改服务器配置:
# 服务器设置
FTP_HOST = '127.0.0.1'        # 服务器地址
FTP_PORT = 2121               # 服务器端口
DATA_PORT_RANGE = (20000, 20100)  # 数据连接端口范围
# 服务器目录
SERVER_ROOT = './ftp_root'    # FTP 根目录
# 用户账户
USERS = {
    'admin': 'admin123',
    'user': 'password',
    'test': 'test123',
    'guest': 'guest'
}
故障排除
常见问题
- 
端口被占用
- 修改 
config.py中的FTP_PORT为其他端口 - 确保防火墙允许该端口通信
 
 - 修改 
 - 
权限错误
- 确保 
ftp_root目录有读写权限 - 在 macOS/Linux 上可能需要 
chmod 755 ftp_root 
 - 确保 
 - 
连接被拒绝
- 检查服务器是否正常启动
 - 验证客户端连接的 IP 和端口是否正确
 
 - 
文件传输失败
- 检查被动模式端口范围是否被防火墙阻止
 - 确保数据连接端口 (20000-20100) 可用
 
 
调试模式
服务器会在控制台输出详细的连接和命令日志,便于调试:
FTP Server started on 127.0.0.1:2121
New connection from ('127.0.0.1', 54321)
Received from ('127.0.0.1', 54321): USER admin
Sent to ('127.0.0.1', 54321): 331 User admin OK. Password required
开发说明
扩展功能
要添加新的 FTP 命令:
- 在 
ftp_session.py的handle_command方法中添加命令路由 - 实现对应的 
handle_xxx方法 - 在 
config.py中添加相应的响应码 
代码结构
FTPServer: 主服务器类,处理客户端连接FTPSession: 单个客户端会话处理config.py: 集中配置管理
许可证
本项目仅用于教育和学习目的。
作者
计算机网络课程设计项目
更多详细信息请参阅 设计报告。
Description
				
					Languages
				
				
								
								
									Python
								
								100%