模块四 ftp练习题


需求分析:

1、 md5加密  用户名、密码

2、 多用户登录 -- 线程池      == 进程池 协程 io多路  只要非阻塞即可

3、 用户登录判断目录,server 创建家目录  登录就进入家目录

4、 对家目录进行目录大小判断, 用户自己设置大小  server获取大小

5、 对切换目录命令做判断,在server端对命令做response操作

6、 ls

7、 上传、下载,文件验证md5

8、 显示进度条

9、 并发 == 协程  单线程多并发 

10、线程池 queue  通过queue实现线程池 控制最大并发个数 

11、用户配置最大并发数 server获取

12、断点续传



server功能:
1、登录  client显示  server处理请求 返回结果给client端  server还是采用反射实现,只是client端显示逻辑改变下
2、注册
调整:登录之后才显示: 
1、查看家目录          pwd
2、设置家目录可用空间   计算家目录下的总空间 < 用户设置的空间
3、切换目录
4、查看家目录下的文件   是文件,目前实现的包含了目录,选出目录下所有文件返回 os.walk实现  
5、文件上传
6、文件下载
7、配置最大并发数   线程池实现  线程池拿到就是10  

模块方式 ==》 通过class实现 各种功能,封装  替代之前的文件

装饰器 逻辑调整不需要登录验证

执行函数方式:
查看client做基本输出,这里还是采用字典的形式,看了会可以用{[func,[]]}这种形式,没有{{func,{}}}这种表现形式好,最后的[{func,{}}]这种形式用不了,前面有索引标识,列表里面包字典前面无法使用id来标识,因此最后综合采用了{{func,{}}} 全字典的方式,后面依旧采用这种形式


login_message_type = {"message_type": "user_login", "username": username, "password": pwd}
register_message_type = {"message_type": "user_register", "username": username, "password": pwd}
message_type_dict = {"message_type": "file_view", "excute": excute, "current_user": current_user}
message_type_dict = {"message_type": "file_upload", "file_name": file_name, "current_user": current_user}
message_type_dict = {"message_type": "file_download", "file_name": file_name,
                                     "current_read_pointer": current_read_pointer, 'current_user': current_user}

全局变量跨文件使用

"""
支持其他命令
res == pwd
os.getcwd()

多级目录文件查看
os.walk

"""
1、逻辑不对,登录进入后退出就清理登录信息,也就是在登录,这样在登录和注册后面无需加入清理的判断,已登录不可能到登录界面,判断是多余的,放到进入后退出清理那里
解决2个问题:
- q退出后怎么在看到进入后的界面
- 在登录界面清理后再次登录报错的问题

2、加上之前研究的queue实现的线程池,在handler里面加入多线程,即可之前做的练习,def def 2个函数实现  加入协程 
3、目录切换问题
4、client user类中把一些重复代码重新组合到一个函数中
5、下载文件做md5验证,注意把md5信息发过去比对
6、......
user_choice = input('是否需要注销再登录?(Y/N):').strip()
if user_choice.upper() == 'Y':
    self.__user_logout()
else:
    break
  • 服务端用个变量存用户的当前目录和根目录信息

code: https://gitlab.myjishu.com/anfenggame/python/ftp_work