需求分析:
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
- 服务端用个变量存用户的当前目录和根目录信息