C++(part2、3-Linux系统编程+数据库项目):Linux网络云盘

文章目录

    • 一、项目需求分析
      • 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


2.流程

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/34551.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Centos9 安装VBox增强功能问题

安装步骤 更新gcc 首先手动更新gcc&#xff0c;防止无法兼容最新版本的内核&#xff0c;我这里将gcc 11更新到gcc 13 1.首先更新当前gcc和支持 yum install -y gcc gcc-c 2.下载新版本gcc压缩包 wget http://ftp.gnu.org/gnu/gcc/gcc-13.1.0/gcc-13.1.0.tar.gz 解压到usr ta…

springboot+vue+mybatis穷游管理系统+PPT+论文+讲解+售后

随着现在网络的快速发展&#xff0c;网上管理系统也逐渐快速发展起来&#xff0c;网上管理模式很快融入到了许多企业的之中&#xff0c;随之就产生了“基于vue的穷游管理系统”&#xff0c;这样就让基于vue的穷游管理系统更加方便简单。 对于本基于vue的穷游管理系统的设计来说…

理解静态单赋值SSA(Static Single Assignment)

理解静态单赋值SSA&#xff08;Static Single Assignment&#xff09; SSA-wiki 静态单赋值&#xff08;Static Single Assignment, SSA&#xff09;是一种中间表示形式&#xff0c;在编译器设计中广泛使用。SSA 的核心思想是程序中的每个变量在其整个生命周期内只被赋值一次。…

企业文件传输系统只能传输?分享功能同样重要!(下)

上篇我们讲述了企业大文件传输的重要性以及镭速在传输方面的优势&#xff0c;同时企业文件的快速共享显得尤为重要。镭速软件在这方面的表现一样尤为突出&#xff0c;它不仅提供了强大的文件传输功能&#xff0c;而且在文件分享方面也有其独到之处。本文将探讨镭速软件在文件分…

协程: Flow 异步流 /

以异步方式返回多个返回值的方案: 在 Kotlin 协程 Coroutine 中 , 使用 suspend 挂起函数 以异步的方式 返回单个返回值肯定可以实现 , 如果要 以异步的方式 返回多个元素的返回值 , 可以使用如下方案 : 集合序列Suspend 挂起函数Flow 异步流 同步调用返回多个值的弊端&…

江协科技51单片机学习- p17 定时器

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…

Unity面试题 UGUI调整UI与粒子特效的显示层级

首先&#xff0c;必须保证Canvas画布的渲染模式为了相机渲染 方法:一&#xff1a;将需要控制UI显示层级的Image换成Sprite 1.创建一个粒子系统&#xff0c;和两张Sprite. 2.设置Sprite1的Order in Layer为 -1&#xff0c;设置Sprite2的Order in Layer为 1&#xff0c;粒子的Ord…

LONGHEADS:无需训练的多头注意力长文本处理框架

大模型&#xff08;LLMs&#xff09;在处理海量文本数据时展现出了前所未有的能力。然而这些模型在面对超出其训练时所见序列长度的长文本时存在两个主要问题&#xff1a;一是模型对于超出预训练长度的文本难以有效泛化&#xff0c;二是注意力机制的二次方时间复杂度导致计算成…

策略模式与函数式编程应用

策略模式 | 单一职责原则&#xff08;Single Responsibility Principle, SRP&#xff09;&#xff1a;islenone和islentwo分别根据特定条件返回电话号码 函数式编程&#xff1a; ‘’ if pd.isna(self.note1) else len(re.findall(r’\d, self.note1)) 重复代码&#xff1a; 当…

活动预告|探索 LLM 大模型的小型化 —— 微软 Phi3在 NVIDIA Jetson 与 NIM 平台的最佳实践

在当前高速发展的人工智能领域&#xff0c;如何高效的部署和优化 SLM (小型的大模型) 成为关键。随着微软 Phi-3 系列模型的发布&#xff0c;让 SLM 在 NVIDIA Jetson 边缘计算平台上的部署成为可能。同时 Phi-3 系列模型已在 NVIDIA NIM 平台提供加速的推理服务。 NVIDIA NIM…

解决File协议导致的CORS限制,用Node.js搭建本地服务器

文章目录 一、前言二、分析报错原因三、如何解决四、具体步骤 你是否曾遇到这样的困境&#xff1a;在本地使用file://协议直接打开HTML文件时&#xff0c;由于现代浏览器的安全限制&#xff0c;无法跨源请求&#xff08;CORS&#xff09;本地资源&#xff1f;尤其是当你试图通过…

老电脑焕发第二春,玩转 Stable Diffusion 3

几年前&#xff0c;我头脑一热&#xff0c;配置了一台顶配级消费 PC&#xff08;RTX 2080 Ti GPU i9 CPU&#xff09;&#xff0c;打算用来学习 AI。然而&#xff0c;起初我并没有找到合适的切入点。深度学习早期阶段&#xff0c;消费级显卡根本无法承担训练大模型、微调大模型…

ONLYOFFICE 桌面编辑器8.1---一个高效且强大的办公软件

软件介绍 ONLYOFFICE 桌面编辑器经过不断的更新换代现在迎来了&#xff0c;功能更加强大的ONLYOFFICE 桌面编辑器8.1是一个功能强大的办公套件&#xff0c;专为多平台设计&#xff0c;包括Windows、Linux和macOS。它提供了一套全面的办公工具&#xff0c;包括文档处理、电子表…

elementplus el-table(行列互换)转置

Element Plus v2.4.0, repl v3.4.0 <template> <div><el-table :data"tableData" style"width: 100%"><el-table-column prop"name" label"名字" width"180" /><el-table-column prop"wei…

如何linux 查询进程和杀死进程

在程序开启长链接的时候&#xff0c;有时候会发现端口被占用的情况&#xff0c;但是又没有启动相关的端口&#xff0c;所以我们需要将端口占用结束掉 1.使用指令netstat -ntlp 查看当前有哪些进程&#xff0c;如图&#xff1a; 2.使用指令kill -9 18785 杀死进程&#xff0c…

代码随想录算法训练营Day33|452. 用最少数量的箭引爆气球,435. 无重叠区间 , 763.划分字母区间

452. 用最少数量的箭引爆气球&#xff1a;代码随想录 这道题目的意思就是你可以垂直的射箭&#xff0c;让你用最少的箭数射完所有的气球&#xff0c;这样其实我们可以很容易的就想到&#xff0c;我们尽可能的去射重叠的气球&#xff0c;这样我们一支箭就可以射多支&#xff0c…

22.2 正则表达式-数据验证、数据变换

1. 数据验证 正则表达可用于验证文本是否满足某种给定的模式。 正则表达式也是一种语言&#xff0c;因此在使用之前必须先对其进行编译&#xff0c;并将编译结果保存在一个Regexp类型的变量里。以下两个函数即返回该变量的指针。 re, err : regexp.Compile("^[a-zA-Z0-…

Charles抓包工具系列文章(一)-- Compose 拼接http请求

一、背景 众所周知&#xff0c;Charles是一款抓包工具&#xff0c;当然是http协议&#xff0c;不支持tcp。&#xff08;如果你想要抓tcp包&#xff0c;请转而使用wireshark&#xff0c;在讲述websocket的相关技术有梳理过wireshark抓包&#xff09; 话说回来&#xff0c;char…

鸿蒙开发系统基础能力:【@ohos.hichecker (检测模式)】

检测模式 HiChecker可以作为应用开发阶段使用的检测工具&#xff0c;用于检测代码运行过程中部分易忽略的问题&#xff0c;如应用线程出现耗时调用、应用进程中Ability资源泄露等问题。开发者可以通过日志记录或进程crash等形式查看具体问题并进行修改&#xff0c;提升应用的使…

存储系统概述

目录 层次结构 存储器的分类 存储器的编址和端模式 存储器端模式 存储器的技术指标 1. 存储容量 示例&#xff1a; 2. 访问速度 访问速度的表现形式&#xff1a; 示例&#xff1a; 3. 功耗 示例&#xff1a; 4. 可靠性 可靠性指标&#xff1a; 示例&#xff1a;…