开发一个支持多用户在线的FTP程序

一、项目需求:开发一个支持多用户在线的FTP程序

1)、基础需求:75%
1. 用户加密认证
2. 允许多用户登录
3. 每个用户都有自己的家目录,且只能访问自己的家目录
4. 对用户进行磁盘分配,每一个用户的可用空间可以自己设置
5. 允许用户在ftp server上随意切换目录
6. 允许用户查看自己家目录下的文件
7. 允许用户上传和下载,保证文件的一致性
8. 文件上传、下载过程中显示进度条

2)、升级需求:10%
1. 文件支持断点续传


二、功能实现
1. 用户加密认证
server端,用户注册密码后,明文发给服务端,服务端md5对密码加密后保存
          用户每次登陆的密码,服务端都md5加密后与数据库的值进行匹配。

2. 允许多用户登录
client端,断开连接后,客户端程序不退出。等待其他用户接入。
server端,持续运行,不主动断开。

3. 每个用户都有自己的家目录,且只能访问自己的家目录
4. 对用户进行磁盘分配,每一个用户的可用空间可以自己设置
client端,连接服务端后,注册用户。收集用户名,密码,磁盘空间
server端,收到用户名,密码,磁盘空间后,给用户创建家目录,并记录家目录空间大小设置。
server端,保存用户名,密码,磁盘空间,家目录路径到account.py。
server端,对于所有涉及路径的指令,执行之前,检查路径是否在家目录之内,超出家目录的不执行
server端,对于所有涉及文件存储的指令,执行之前,检查家目录剩余空间,空间不够不执行

5. 允许用户在ftp server上随意切换目录
_cd 命令:_cd "dst_dir"
    client端,get_cmd 方法搜集用户指令,根据cmd找到cd,cd方法得到head_dic,交给handler_send 发送数据。handler_recv接收server的执行回执,并打印结果
    server端,handler_recv 方法接收数据,拿到head_dic和cmd,order_handler根据cmd找到cd,cd 方法的到res_head_dic,交给handler_send发送数据
    server.mt方法:server类下存储类属性,dir_info字典里头存储当前路径,和家目录路径。收到用户的dst_dir之后,改变dir_info中的current_dir的值。

6. 允许用户查看自己家目录下的文件
server端,server类下存储类属性,dir_info字典里头存储current_dir和home。用户登录之后,会绑定用户家目录路径给dir_info['home']
          用户输入dir home 就会显示家目录下的文件。输入dir 就会显示current_dir下的文件。
7. 允许用户上传和下载,保证文件的一致性
client端,通过get_md5_file方法对文件进行校验,得到hash值
server端,通过get_md5_file方法对文件进行校验,得到hash值,与client端的值进行比较,返回结果。不相等需要重发。
send_file方法:client端,获取src_file,和dst_file。src_file必须输入并且文件存在。dst_file缺省是,默认保存到server家目录下的download文件夹下
                         发送dic,包括,cmd,src,dst,filename,size,file_hash。函数发现有size,进一步发送文件。
                         收取server端发来的执行结果。
               server端,收到dic,发现有size,就进一步接收文件,先校验磁盘空间,在校验dst路径(合法,存在),最后校验hash
                         处理完毕后,返回执行结果给client端。
get_file方法:client端,获取src_file,和dst_file。src_file必须输入。dst_file缺省时,默认保存到client的data下
                        发送dic包括,cmd,src,dst,filename,
                        收取server端发送来的dic,打印res。
                        发现有size,进一步接收文件,先校验dst是否存在,接收完毕后校验hash值是否一致。
              server端,收到dic,根据cmd交给,get_file去处理,先验证src路径(合法,存在),然后得到file_hash和size。
                        发送dic, 包括res,src,dst,filename,size,file_hash。函数发现有size,进一步发送文件。

8. 文件上传、下载过程中显示进度条
view_bar方法:client端发送文件时,根据send_size,和file_size来显示进度。client端接收文件时,根据recv_size 和 file_size来显示进度
功能实现

 

posted @ 2020-09-14 21:56  正在学Python  阅读(301)  评论(0编辑  收藏  举报