环境安装配置

一、安装配置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的私有文件服务器(网盘)...相关推荐

  1. 基于javaweb的在线嘿嘿网盘系统设计和实现(java+springboot+ssm+mysql)

    基于javaweb的在线嘿嘿网盘系统设计和实现(java+springboot+ssm+mysql) 运行环境 Java≥8.MySQL≥5.7 开发工具 eclipse/idea/myeclipse ...

  2. python 网盘多帐号_CuteOne:一款基于Python3的OneDrive多网盘挂载程序,带会员/同步等功能...

    说明:现在OneDrive挂载目录程序越来越多了,之前水了很多了,包括PyOne.OneIndex.OLAINDEX和OneList,近期又出现了个CuteOne,一个基于Python3的OneDri ...

  3. GitHub标星10.8K!快速搭建私人网盘

    来自:开源最前线(ID:OpenSourceTop) 链接:https://blog.eduonix.com/software-development/top-10-ides-c-c-develope ...

  4. CuteOne基于Python3的OneDrive多网盘挂载程序+带会员

    CuteOne:一款基于Python3的OneDrive多网盘挂载程序,带会员/同步等功能支持多盘负载.在线查看.在线上传.下载.多网盘同步.主从同步.在线分享.文件夹权限管理.会员功能.等级制度.付 ...

  5. 华为自研系统鸿蒙为什么也要基于linux来开发?

    众所周知,目前国内已有众多的国产系统,基本上均源自linux,以linux为基础进行二次开发.比如红旗linux.深度等等. 但不知道为什么,一说起某系统是基于linux而来,很多网友就瞧不起,并且会 ...

  6. 应用linux系统的机器人,一种基于linux的机器人系统及方法与流程

    技术特征: 1.一种基于linux的ros+android+移动底盘rtos深度融合的机器人系统,其特征在于,包括器人主板.移动底盘以及云端,所述机器人主板为linux系统.ros系统以及androi ...

  7. 基于Springboot实现仿百度网盘开发

    项目编号:BS-PT-032 本项目基于Springboot开发实现,前端采用BootStrap开发实现,系统功能完整,交互性好,模仿百度网盘实现相关功能,比较适合做毕业设计使用,创意性强. 开发工具 ...

  8. linux 访问西数网盘,不买iCloud了,果粉福音:WD 西数 My Cloud Home 3TB 私有云盘 开箱体验...

    不买iCloud了,果粉福音:WD 西数 My Cloud Home 3TB 私有云盘 开箱体验 2018-05-29 20:04:35 25点赞 136收藏 47评论 虽然换了很多手机,但是自己的照 ...

  9. 基于CentOS 搭建 Seafile 专属网盘

    系统要求:CentOS 7.2 64 位操作系统 安装 Seafile 安装依赖环境 使用 yum 安装 Python 及 MySQL: yum install python python-setup ...

最新文章

  1. python最小生成树算法_图算法|Prim算法求最小生成树
  2. 雅虎中国弃门户回归搜索 推出新搜索产品线
  3. 关于JS中的constructor与prototype
  4. memcache及其telnet命令使用详解
  5. PHP在各种HTTP服务器上运行模式分析
  6. 安装pipenv搭建虚拟环境做flask
  7. 微信小程序获取openid
  8. Asp.Net Core Web应用程序—探索
  9. 原生JS字符串操作方法汇总
  10. java爬虫代码示例_那些让你代码思维和能力有较大的提升Java源码
  11. 如果把钢铁侠中的贾维斯系统换成现在的人工智能会怎么样?
  12. HTML竖着写古诗,诗词竖着写的格式(例: 题临安邸 )
  13. VS2019+OpenCV4.5 鱼眼相机图像畸变矫正
  14. excel-柱状图不同柱子不同颜色设置
  15. java 随机手机验证码_Java实现随机生成手机短信验证码的简单代码
  16. Qt编写视频监控管理平台(支持海康/大华/宇视/华为/天地伟业/H264/H265等)
  17. SpringBoot(39) 整合ELK
  18. 前端使用sockJs进行聊天通讯的功能
  19. 乐视网今日开市起停牌 深交所将作出是否暂停上市的决定
  20. 【IDL】使用IDL对Landsat系列进行批量水体提取

热门文章

  1. 基于Java毕业设计银行招聘系统设计源码+系统+mysql+lw文档+部署软件
  2. PHPwind9.01图解安装教程 PHPwind怎么安装方法
  3. 关于android 进程CPU占用率高的原因分析
  4. 学认五线谱-基本乐理
  5. PP实施经验分享(21)——(ECC版本)生产版本\BOM\工艺路线选择(涉及批量大小应用)
  6. 【云原生】Docker仓库详细讲解,搭建使用 Docker Registry 私服
  7. 史上最全手机简史,无线通讯佳话还在持续...
  8. STC 模拟eeprom数据丢失
  9. 我所玩过的GALGAME——メンアットワーク!魔兽学院men at work2的中文版《永远的羁绊》全攻略
  10. Oracle Linux 6.4(BOND)双网卡绑定实战—附加说明