转发注明出处:,这次博客写了很久~~

 

一、需求

1. 用户加密认证 (完成)
2. 允许同时多用户登录 (完成)
3. 每个用户有自己的家目录 ,且只能访问自己的家目录(完成)
4. 对用户进行磁盘配额,每个用户的可用空间不同(完成)
5. 允许用户在ftp server上随意切换目录cd(完成)
6. 允许用户查看当前目录下文件ls(完成)
7. 允许上传put和下载get文件(完成),保证文件一致性(此需求不做)
8. 文件传输过程中显示进度条(完成)
附加功能:

 1.新建目录mkdir(完成)

 2.查看当前工作目录的路径pwd(完成)

 3.支持文件的断点续传(未完成)

 

二、程序目录结构

客户端:

python之FTP程序(支持多用户在线)

服务端:

 python之FTP程序(支持多用户在线)

 

三、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
        判断宿主目录磁盘空间是否够用,可以,上传文件;否则,报错.
View Code

相关文章:

  • 2022-12-23
  • 2021-06-06
  • 2021-08-04
  • 2022-03-04
  • 2021-11-24
  • 2021-08-30
  • 2021-09-17
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-04-12
相关资源
相似解决方案