转发注明出处:,这次博客写了很久~~
一、需求
1. 用户加密认证 (完成)
2. 允许同时多用户登录 (完成)
3. 每个用户有自己的家目录 ,且只能访问自己的家目录(完成)
4. 对用户进行磁盘配额,每个用户的可用空间不同(完成)
5. 允许用户在ftp server上随意切换目录cd(完成)
6. 允许用户查看当前目录下文件ls(完成)
7. 允许上传put和下载get文件(完成),保证文件一致性(此需求不做)
8. 文件传输过程中显示进度条(完成)
附加功能:
1.新建目录mkdir(完成)
2.查看当前工作目录的路径pwd(完成)
3.支持文件的断点续传(未完成)
二、程序目录结构
客户端:
服务端:
三、README
重要!
一、需求 1. 用户加密认证 (完成) 2. 允许同时多用户登录 (完成) 3. 每个用户有自己的家目录 ,且只能访问自己的家目录(完成) 4. 对用户进行磁盘配额,每个用户的可用空间不同(完成) 5. 允许用户在ftp server上随意切换目录cd(完成) 6. 允许用户查看当前目录下文件ls(完成) 7. 允许上传put和下载get文件(完成),保证文件一致性(此需求不做) 8. 文件传输过程中显示进度条(完成) 附加功能: 1.新建目录mkdir(完成) 2.查看当前工作目录的路径pwd(完成) 3.支持文件的断点续传(未完成) 二、目录结构及模块功能解释 ftp_client |----bin(可执行目录) | |----__init__.py | |----ftp_client.py(客户端接口) |----conf(配置文件目录) | |----__init__.py | |----settings.py(配置文件) |----core(核心代码) | |----__init__.py | |----auth.py(客户端身份验证) | |----cd.py(实现客户端在服务随意切换目录的功能,但只能访问自己的家目录) | |----get.py(客户端下载功能) | |----interactive.py(用于客户端与服务端的交互/反射) | |----ls.py(查看当前目录下的文件(包括目录)) | |----main.py(主函数,运行被ftp_client.py客户端接口调用) | |----mkdir.py(实现用户在当前目录下可创建目录的功能) | |----progress_bar.py(进度条:用于显示上传与下载的进度) | |----put.py(处理客户端上传功能) | |----pwd.py(查看用户当前的目录) |----__init__.py ftp_server |----bin | |----__init__.py | |----ftp_server.py(服务端接口) |----core | |----__init__.py | |----auth.py(用户加密认证,登陆模块) | |----db_handle.py(读用户数据与写用户数据--感觉这个模块有点多余~) | |----deal_cd.py(处理用户切换目录的功能) | |----deal_get.py(处理客户端下载文件的请求) | |----deal_ls.py(完成用户显示当前目录下文件(包括目录)的请求) | |----deal_mkdir.py(处理用户在当前目录(家目录下)创建目录的请求) | |----deal_put.py(处理客户端上传文件的请求) | |----deal_pwd.py(用来处理客户端查看当前目录下的请求) | |----get_dirisize.py(获取用户家目录的大小(字节)) | |----main.py(主函数--运行时被ftp_server.py服务端接口调用) |----data(用户数据库) | |----__init__.py | |----Alex.json(Alex用户的数据库) | |----zcl.json(zcl用户的数据库) |----home(home目录,用来存放各用户的家目录) | |----Alex(Alex的家目录) | |----zcl(zcl的家目录) | |----__init__.py |----log(日志--未拓展) | |----__init__.py |----__init__.py 三、状态码 LOGIN_STATE = { "auth_True":"200", #认证成功 "auth_False":"400", #认证失败 "file_exit":"202", #文件存在 "file_no_exit":"402", #文件不存在 "cmd_right":"201", #命令正确 "cmd_error":"401", #命令错误 "dir_exit":"203", #目录已存在 "dir_no_exit":"403", #目录不存在 "cmd_success":"204", #命令成功执行 "cmd_fail":"404", #命令执行失败 "size_enough":"205", #磁盘空间足够 "size_empty":"405", #磁盘空间不足 } 四、功能解释 1.conf目录下settings.py模块记录可操作用户信息,根据用户信息生成用户字典和宿主目录,已经生成的不再新建。 2.每个用户的宿主目录磁盘空间配额默认为100M,可在settings.py模块里进行修改 3.程序运行在windows8.1系统上,pycharm 3.4,程序需求除断点续传与保证文件一致性外全部实现。 4.切换目录: cd .. 返回上一级目录 cd dirname 进入dirname eg:cd \aa 用户登陆后默认进入宿主目录,只可在宿主目录下随意切换. 5.创建目录:mkdir dirname 在当前目录下创建目录,如果目录存在则报错,不存在创建. 6.查看当前目录完整路径: pwd 7.查看当前路径下的文件名和目录名: ls 8.下载文件(不可续传):get filename ①、服务端当前目录存在此文件,客户端不存在此文件,直接下载. ②、服务端当前目录存在此文件,客户端存在此文件名,之前下载中断,文件不可续传(未实现). ③、服务端当前目录存在此文件,客户端存在此文件名,下载,文件名为filename+".new". 9.上传文件:put filename 判断宿主目录磁盘空间是否够用,可以,上传文件;否则,报错.