私有文件服务器系统,GitHub - xty438307820/NetDisk-Private: 基于Linux的私有文件服务器(网盘)...
环境安装配置
一、安装配置mysql
安装mysql
sudo apt-get install mysql-server mysql-client
sudo apt-get install libmysqlclient-dev
以root身份进入mysql,这里root默认密码为空
sudo mysql -u root
//创建普通用户
mysql> CREATE USER 'abc'@'localhost' IDENTIFIED BY '123';
//创建数据库
mysql> create database FileServer;
//分配权限
mysql> GRANT ALL PRIVILEGES ON FileServer.* TO 'abc'@'localhost';
mysql> exit
//以普通用户登陆
mysql -uabc -p123
创建并初始化数据表
use FileServer;
create table UserInfo(
UserName varchar(128) primary key,
Salt char(32) not null,
PassWord char(128) not null
);
功能需求
一、基本功能
编写服务器端,服务器端启动,然后启动客户端,通过客户端可以输入以下命令进行服务器上的文件查看:
1.cd [目录名] #进入对应目录,cd .. 进入上级目录
2.ls #列出相应目录文件
3.puts [文件名] #将本地文件上传至服务器
4.gets [文件名] #下载服务器文件到本地
5.remove [文件、目录名] #删除服务器上文件或目录
6.pwd #显示目前所在路径
7.mkdir [目录名] #创建目录
8.clear #清空屏幕
9.其他命令不响应
二、扩展功能
2.1 用户注册,密码验证
客户端进行用户密码验证后,才可进行操作,客户端只能看到自己的文件,不能看到其他用户的文件。
服务端通过数据库存储用户名和密码。
2.2 断点续传
文件传输过程中断,下次传输同一文件从中断处开始传输
2.3 日志记录
服务端记录客户端连接时间及操作时间,写入log文件
2.4 超时断开
针对连接上的客户端,超过30秒未发送任何请求,关闭其描述符
2.5 大文件加速传递
文件大小大于100M,将大文件映射进内存,进行网络传递
运行项目
一、运行服务端
编译
cd server
mkdir home virtualFile //创建用户工作目录
mkdir build
cd build
cmake ..
make
修改 conf/server.conf 服务端ip和端口
192.168.67.128 //ip
2000 //端口号
/home/yu/AOS/FileServer/server/home //用户工作目录
启动服务端
./FtpServer ../conf/server.conf
二、运行客户端
编译
cd client
mkdir build
cd build
cmake ..
make
启动客户端
./FtpClient [服务端ip] [服务端端口]
三、测试
先启动服务器,再启动客户端程序
3.1 连接成功,注册账号
服务端输出:
thread pool start success
client 192.168.67.128 36714 connect
...
客户端输出:
connect success
Please choose your action:
1.login
2.register
>> 2
Please input you UserName:user1
Input password:
register success
3.2 注册成功,进行登陆
Please choose your action:
1.login
2.register
>> 1
Please input your UserName:user1
Input password:
login success
3.3 登陆成功,进行操作
创建3个目录,列出目录,进入目录,查看目前所在路径
user1> mkdir dir1
user1> mkdir dir2
user1> mkdir dir3
user1> ls
type name size
d dir1 4096B
d dir2 4096B
d dir3 4096B
user1> cd dir1
user1> pwd
/dir1
user1> cd ..
user1> pwd
/
将本地文件上传
//清空屏幕
user1> clear
user1> puts The_Holy_Bible.txt
100.0%
puts success
user1> ls
type name size
d dir1 4096B
d dir2 4096B
d dir3 4096B
- The_Holy_Bible.txt 4351658B
将本地文件The_Holy_Bible.txt删除,测试下载功能
user1> gets The_Holy_Bible.txt
100.00%
gets success
测试remove功能,删除一个文件和一个目录
user1> remove The_Holy_Bible.txt
user1> remove dir1
user1> ls
type name size
d dir2 4096B
d dir3 4096B
等待30秒不输入命令,服务端自动断开客户端连接
日志记录查看log文件夹下的log文件
设计图
注册登陆时序图
用户注册,客户端生成随机盐值(salt),对用户密码进行加密,客户端将用户账号,盐值,密文密码传输至服务端,服务端将用户信息存储到mysql中;用户登陆,客户端先将用户名传输给服务端,服务端根据用户名查找盐值,然后返回盐值给客户端,客户端用拿到的盐值对密码加密,然后传输密文密码至服务端,服务端将密文密码与mysql存储的密文密码进行比较,返回登陆成功与否
系统时序图
系统部署图
应用层数据包格式
————————————————————————————
| 数据长度(n) | 数 据 |
| (4 B) | (n B) |
————————————————————————————
超时断开算法
使用环形队列法,环上每个节点维护一个Set,监控线程设定每隔1秒触发的定时器,每次监控线程定时器超时,前进一个节点,将此节点的fd全部断开,然后清空Set;当客户端有请求到达时,从Set中删除此fd,然后将fd加进当前节点的前一个位置的Set中。
私有文件服务器系统,GitHub - xty438307820/NetDisk-Private: 基于Linux的私有文件服务器(网盘)...相关推荐
- 基于javaweb的在线嘿嘿网盘系统设计和实现(java+springboot+ssm+mysql)
基于javaweb的在线嘿嘿网盘系统设计和实现(java+springboot+ssm+mysql) 运行环境 Java≥8.MySQL≥5.7 开发工具 eclipse/idea/myeclipse ...
- python 网盘多帐号_CuteOne:一款基于Python3的OneDrive多网盘挂载程序,带会员/同步等功能...
说明:现在OneDrive挂载目录程序越来越多了,之前水了很多了,包括PyOne.OneIndex.OLAINDEX和OneList,近期又出现了个CuteOne,一个基于Python3的OneDri ...
- GitHub标星10.8K!快速搭建私人网盘
来自:开源最前线(ID:OpenSourceTop) 链接:https://blog.eduonix.com/software-development/top-10-ides-c-c-develope ...
- CuteOne基于Python3的OneDrive多网盘挂载程序+带会员
CuteOne:一款基于Python3的OneDrive多网盘挂载程序,带会员/同步等功能支持多盘负载.在线查看.在线上传.下载.多网盘同步.主从同步.在线分享.文件夹权限管理.会员功能.等级制度.付 ...
- 华为自研系统鸿蒙为什么也要基于linux来开发?
众所周知,目前国内已有众多的国产系统,基本上均源自linux,以linux为基础进行二次开发.比如红旗linux.深度等等. 但不知道为什么,一说起某系统是基于linux而来,很多网友就瞧不起,并且会 ...
- 应用linux系统的机器人,一种基于linux的机器人系统及方法与流程
技术特征: 1.一种基于linux的ros+android+移动底盘rtos深度融合的机器人系统,其特征在于,包括器人主板.移动底盘以及云端,所述机器人主板为linux系统.ros系统以及androi ...
- 基于Springboot实现仿百度网盘开发
项目编号:BS-PT-032 本项目基于Springboot开发实现,前端采用BootStrap开发实现,系统功能完整,交互性好,模仿百度网盘实现相关功能,比较适合做毕业设计使用,创意性强. 开发工具 ...
- linux 访问西数网盘,不买iCloud了,果粉福音:WD 西数 My Cloud Home 3TB 私有云盘 开箱体验...
不买iCloud了,果粉福音:WD 西数 My Cloud Home 3TB 私有云盘 开箱体验 2018-05-29 20:04:35 25点赞 136收藏 47评论 虽然换了很多手机,但是自己的照 ...
- 基于CentOS 搭建 Seafile 专属网盘
系统要求:CentOS 7.2 64 位操作系统 安装 Seafile 安装依赖环境 使用 yum 安装 Python 及 MySQL: yum install python python-setup ...
最新文章
- python最小生成树算法_图算法|Prim算法求最小生成树
- 雅虎中国弃门户回归搜索 推出新搜索产品线
- 关于JS中的constructor与prototype
- memcache及其telnet命令使用详解
- PHP在各种HTTP服务器上运行模式分析
- 安装pipenv搭建虚拟环境做flask
- 微信小程序获取openid
- Asp.Net Core Web应用程序—探索
- 原生JS字符串操作方法汇总
- java爬虫代码示例_那些让你代码思维和能力有较大的提升Java源码
- 如果把钢铁侠中的贾维斯系统换成现在的人工智能会怎么样?
- HTML竖着写古诗,诗词竖着写的格式(例: 题临安邸 )
- VS2019+OpenCV4.5 鱼眼相机图像畸变矫正
- excel-柱状图不同柱子不同颜色设置
- java 随机手机验证码_Java实现随机生成手机短信验证码的简单代码
- Qt编写视频监控管理平台(支持海康/大华/宇视/华为/天地伟业/H264/H265等)
- SpringBoot(39) 整合ELK
- 前端使用sockJs进行聊天通讯的功能
- 乐视网今日开市起停牌 深交所将作出是否暂停上市的决定
- 【IDL】使用IDL对Landsat系列进行批量水体提取
热门文章
- 基于Java毕业设计银行招聘系统设计源码+系统+mysql+lw文档+部署软件
- PHPwind9.01图解安装教程 PHPwind怎么安装方法
- 关于android 进程CPU占用率高的原因分析
- 学认五线谱-基本乐理
- PP实施经验分享(21)——(ECC版本)生产版本\BOM\工艺路线选择(涉及批量大小应用)
- 【云原生】Docker仓库详细讲解,搭建使用 Docker Registry 私服
- 史上最全手机简史,无线通讯佳话还在持续...
- STC 模拟eeprom数据丢失
- 我所玩过的GALGAME——メンアットワーク!魔兽学院men at work2的中文版《永远的羁绊》全攻略
- Oracle Linux 6.4(BOND)双网卡绑定实战—附加说明