# NetDisk
### FTP文件服务器设计思路:
#### 1.整体架构采用线程池结合epoll监听
客户端通过sockfd与服务器通信,服务器通过sockfd进行连接新的客户端,用accept到的newfd与客户端进行通信;
主线程负责向子线程分配任务,子线程负责处理任务并于客户端通信;
简单命令主线程直接执行,puts 和 gets 命令交给子线程执行。
#### 2.文件系统采用虚拟文件目录设计,将所有的文件存放在一个公共目录中,自己只能看到自己的文件,并创建好一个存放文件信息的数据库(此处数据库采用MYSQL)
FileId | Dir | FileName | FileSize |FileType | MD5 |User |
FileId : 文件ID, 主键, 自增型
Dir : 所在目录,0则表示根目录
FileName : 文件名称,可以相同,区分靠FileId
FileSize : 文件大小(B显示)
FileType : f 代表文件类型,d代表文件夹类型
MD5 : 文件的MD5值,用来判断文件的内容是否相同
User :文件的所属对象
### 命令实现:
1.cd 进入对应目录
2.ls 列出相应目录文件
3.puts 将本地文件上传至服务器
4.gets 文件名 下载服务器文件到本地
5.mkdir 增加文件夹
6.rm 删除服务器上文件
7.quit 退出
8.其他命令不响应
### 功能实现:
1.用户登陆与密码验证
类似/etc/shadow文件下的盐值加密,使用crypt函数进行加密,将用户账号,密码以及加密后的数据存放在数据库中;
盐值salt(随机生成)的8个字符,密码匹配方式是服务器根据客户端的用户名找到其Salt,并将Salt发送回客户端,客户端进行crypt加密后再发送给服务器进行匹配,其中需要注意客户端是没有权限访问数据库的
User | Password | Salt | Cipher
2.记录日志信息:包括客户端的请求信息,客户端连接时间,客户端的操作记录以及操作时间,并将信息都存放在数据库中;
User | Operation | time
3.文件的断点续传:客户端gets过程中如果断开,再次gets时,从断点开始传输
具体实现:客户端如果有要接收的文件file并已经下载了1000字节,则向服务器发送 gets file 1000, 服务器直接从偏移1000字节的位置开始传送,客户端也偏移1000字节开始接收
4.使用token令牌
token的介绍:https://www.jianshu.com/p/24825a2683e6
5.连接上的客户端如果30s没有相应,那么关闭描述符
https://mp.weixin.qq.com/s?__biz=MjM5ODYxMDA5OQ==&mid=2651959957&idx=1&sn=a82bb7e8203b20b2a0cb5fc95b7936a5&chksm=bd2d07498a5a8e5f9f8e7b5aeaa5bd8585a0ee4bf470956e7fd0a2b36d132eb46553265f4eaf&mpshare=1&scene=23&srcid=0718Qlp4AVKnZq1E1f144pE6#rd
此处采用轮询扫描法,设置Map<string,int> //<用户名,上一次发送包的时间>
设置一个timer,每秒都轮询Map中的元素,并将时间差大于30s的客户端连接断开
6.多点下载(选做)
### 数据库创建(只需进入数据库执行一次即可):
##########################################
### 创建数据库 Netdisk
##########################################
CREATE DATABASE Netdisk;
use Netdisk
##########################################
### 创建表 Virtual_Dir
##########################################
CREATE TABLE Virtual_Dir
(
FileId int NOT NULL AUTO_INCREMENT,
Dir int NOT NULL,
FileName varchar(10) NOT NULL,
FileSize BIGINT NULL,
FileType char(1) NOT NULL,
MD5 varchar(50) NULL,
User varchar(10) NOT NULL,
PRIMARY KEY(FileId)
) ENGINE=InnoDB;
INSERT INTO Virtual_Dir(Dir, FileName, FileSize, FileType, MD5, User)
VALUES(0, 'file5', 512, 'f', 'md5', 'wwx');
##########################################
### 创建表 Shadow
##########################################
CREATE TABLE Shadow
(
User varchar(10) NOT NULL,
Password varchar(18) NOT NULL,
Salt char(8) NOT NULL,
Cipher text NOT NULL,
PRIMARY KEY(User)
) ENGINE=InnoDB;
INSERT INTO Shadow
VALUES('wwx', '123', 'xxxxxxxx', 'xxx..xxx');
##########################################
### 创建表 Log
##########################################
CREATE TABLE Log
(
Id int NOT NULL AUTO_INCREMENT,
User varchar(100) NOT NULL,
Operation varchar(100) NOT NULL,
time varchar(100) NOT NULL,
PRIMARY KEY(Id)
) ENGINE=InnoDB;
INSERT INTO Log (User, Operation, time)
VALUES();
没有合适的资源?快使用搜索试试~ 我知道了~
Linux C C++项目虚拟文件服务器功能匹配百度网盘源码+详细项目说明.zip
![preview](https://csdnimg.cn/release/downloadcmsfe/public/img/white-bg.ca8570fa.png)
共22个文件
cpp:8个
h:8个
makefile:2个
![preview-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/scale.ab9e0183.png)
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 125 浏览量
2024-05-26
21:14:17
上传
评论
收藏 52KB ZIP 举报
温馨提示
FTP文件服务器设计思路: 1.整体架构采用线程池结合epoll监听 客户端通过sockfd与服务器通信,服务器通过sockfd进行连接新的客户端,用accept到的newfd与客户端进行通信; 主线程负责向子线程分配任务,子线程负责处理任务并于客户端通信; 简单命令主线程直接执行,puts 和 gets 命令交给子线程执行。 2.文件系统采用虚拟文件目录设计,将所有的文件存放在一个公共目录中,自己只能看到自己的文件,并创建好一个存放文件信息的数据库(此处数据库采用MYSQL) FileId | Dir | FileName | FileSize |FileType | MD5 |User | FileId : 文件ID, 主键, 自增型 Dir : 所在目录,0则表示根目录 FileName : 文件名称,可以相同,区分靠FileId FileSize : 文件大小(B显示) FileType : f 代表文件类型,d代表文件夹类型 MD5 : 文件的MD5值,用来判断文件的内容是否相同 User :文件的所属对象 命令实现: 1.cd 进入对应目录 2.ls 列出相应目录文件
资源推荐
资源详情
资源评论
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
收起资源包目录
![package](https://csdnimg.cn/release/downloadcmsfe/public/img/package.f3fc750b.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/TXT.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
共 22 条
- 1
资源评论
![avatar-default](https://csdnimg.cn/release/downloadcmsfe/public/img/lazyLogo2.1882d7f4.png)
![avatar](https://profile-avatar.csdnimg.cn/8b9566d6b7ee402eb11b3ab031c6660f_fl1768317420.jpg!1)
FL1768317420
- 粉丝: 4883
- 资源: 5740
![benefits](https://csdnimg.cn/release/downloadcmsfe/public/img/vip-rights-1.c8e153b4.png)
下载权益
![privilege](https://csdnimg.cn/release/downloadcmsfe/public/img/vip-rights-2.ec46750a.png)
C知道特权
![article](https://csdnimg.cn/release/downloadcmsfe/public/img/vip-rights-3.fc5e5fb6.png)
VIP文章
![course-privilege](https://csdnimg.cn/release/downloadcmsfe/public/img/vip-rights-4.320a6894.png)
课程特权
![rights](https://csdnimg.cn/release/downloadcmsfe/public/img/vip-rights-icon.fe0226a8.png)
开通VIP
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
最新资源
- 嵌入式基于STM32、RFID的门禁管理系统的STM32端代码
- Java项目:基于SSM框架实现的汽车养护保养管理系统【ssm+B/S架构+源码+数据库+开题+毕业论文+任务书】
- ASP仿游戏交易网站源码.zip
- 编译原理HIT-Compiler-Experiment.zip
- 使用WPS 表格 内置VBA、VBS模块通过企业微信自建应用发送消息
- 基于Spring Cloud的在线考试系统
- 基于springboot+elasticsearch的酒店项目,同时附上安装ES教程
- 小程序版通过python-CNN训练识别森林还是沙漠区域-含图片数据集.zip
- 小程序版通过python-CNN训练识别会飞的昆虫-含图片数据集.zip
- 小程序版通过python-CNN深度学习对猫狗识别-含图片数据集.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)