文章目录
- 一、项目需求分析
- 1.一期:命令行解析
- (1)cd(用栈管理)、ls、pwd
- (2)puts、gets
- (3)mkdir、touch、rmdir、rm
- 2.二期:密码验证、日志、断点续传、大文件传输
- (1)密码验证
- (2)日志
- (3)断点续传
- (4)大文件传输
- 3.三期:用户注册、用户登录、虚拟文件表、文件秒传
- (1)用户注册
- (2)用户登录:从linux密码,改为用数据库保存用户名和密码
- (3)虚拟文件表 (网盘项目的精髓)
- (4)md5码:根据文件内容,生成哈希值,避免重复存相同的文件
- (5)文件秒传
- 4.四期:长短命令分离、Token身份验证、超时断开连接
- (1)长短命令分离
- (2)身份验证:token技术
- (3)超时断开连接:时间轮盘法
- 5.五期:多点下载
- 二、框架、流程
- 1.框架
- (1)服务器框架
- (2)客户端框架
- (3)代码仓库地址
- 2.流程
一、项目需求分析
定接口,框架
1.一期:命令行解析
(1)cd(用栈管理)、ls、pwd
(2)puts、gets
(3)mkdir、touch、rmdir、rm
2.二期:密码验证、日志、断点续传、大文件传输
(1)密码验证
读shadow文件,得到setting信息
#include <crypt.h>
char * crypt(const char *phrase, const char *setting);
(2)日志
(3)断点续传
(4)大文件传输
3.三期:用户注册、用户登录、虚拟文件表、文件秒传
(1)用户注册
(2)用户登录:从linux密码,改为用数据库保存用户名和密码
(3)虚拟文件表 (网盘项目的精髓)
md5码,占据16个字节
(4)md5码:根据文件内容,生成哈希值,避免重复存相同的文件
md5码 ( md5sum)→ sha码 ( sha256sum )
一个md5码 存储:32位十六进制数,16个字节
md5的demo:
(5)文件秒传
4.四期:长短命令分离、Token身份验证、超时断开连接
(1)长短命令分离
①短命令是立即执行完毕的。
②长命令是需要一定时间才能执行完毕的。
长短命令分离是为了执行长命令之后,还能立即执行短命令。
实现:
模仿FTP协议,两个端口号 (每个端口号对应一个线程池),一个线程池传命令,另一个线程池传数据。
主线程执行短命令,子线程执行长命令。
(2)身份验证:token技术
Token的生成
JWT:l8w8jwt库
(3)超时断开连接:时间轮盘法
5.五期:多点下载
从3个不同的服务器,进行分片下载。
客户端 通过 调度服务器,获得 三个服务器的IP port
二、框架、流程
1.框架
(1)服务器框架
https://gitee.com/cplusplus2023/cpp58th/tree/master/2_Linux/CloudiskServer/server
(2)客户端框架
https://gitee.com/cplusplus2023/cpp58th/tree/master/2_Linux/CloudiskServer/client
(3)代码仓库地址
https://github.com/WangEdward1027/ClouddiskServer/tree/master/3.0