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.流程

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

生命在于学习——Python人工智能原理(4.2)

三、Python的数据类型 3.1 python的基本数据类型 特点&#xff1a; 表示单一的、原子性的数据。 不可再分&#xff0c;是语言内建的最基本的数据类型。 存储的是简单的数值、字符、布尔值等。 在内存中通常占据固定大小的空间。 Python提供了整数、浮点数和复数三种数字类型和…

JavaScript的学习之事件的简介

目录 一、事件是什么 二、如何处理事件 一、事件是什么 定义&#xff1a;事件就是浏览器和用户之间的交互行为。 例如&#xff1a;点击按钮、鼠标移动、关闭窗口等。 二、如何处理事件 我们可以在对应的事件属性中设置一些JS行为&#xff0c;当事件触发的时候会将这些代码执行…

QT拖放事件之三:自定义拖放操作-利用QDrag来拖动完成数据的传输

1、运行效果 1)Qt::MoveAction 2)Qt::CopyAction 2、源码 #include "Widget.h" #include "ui_Widget.h" #include "common.h"

pyhon模块以及常用的第三方模块

import my_info as info print(info.name) info.show()from my_info import * print(name) show() pyhon中包的导入 import admin.my_admin as ad # 包名.模块名 admin是包名&#xff0c;my_admin是模块名print(ad.name) print(ad.info())from admin import my_admin as ad # …

[RPI4] 树莓派4b安装istoreos及使用 -- 1. 系统安装

最近在研究家庭智能化的一些东西,其中包括网络,智能家居等一系列内容,然后看过的资料有的想再回来看的时候就找不到了,然后就想着开这么一个系列,做一些记录,先从智能家居开始吧。 1 安装istoreos系统 iStoreOS 目标是提供一个人人会用的路由兼轻 NAS 系统,不管是作为路…

【本地知识库】本地知识库+语言大模型=知域问答

本地知识库语言大模型知域问答 本项目实质为本地知识库构建及应用&#xff0c;内容包含&#xff1a; 本地知识库构建及应用相关知识的介绍离线式本地知识库构建及应用在线式本地知识库构建及应用 本地知识库构建及应用相关知识的介绍 本地知识库 本地知识库通常是指存储在…

主播美颜工具背后的技术:视频直播美颜SDK详解

美颜效果是如何实现的呢&#xff1f;其中的关键技术就是视频直播美颜SDK。本篇文章&#xff0c;笔者将详细为您解答美颜SDK的核心技术和实现原理&#xff0c;探讨其背后的秘密。 一、美颜SDK的基本原理 美颜SDK的这些功能依赖于图像处理和计算机视觉技术&#xff0c;通过对视…

Java 8 Date and Time API

Java 8引入了新的日期和时间API&#xff0c;位于java.time包下&#xff0c;旨在替代旧的java.util.Date和java.util.Calendar类。新API更为简洁&#xff0c;易于使用&#xff0c;并且与Joda-Time库的一些理念相吻合。以下是Java 8 Date and Time API中几个核心类的简要概述&…

【服务器05】之【登录/注册账号成功转至游戏场景】

Unity登录注册数据库 打开【服务器01】的文章项目 导入新UI系统 点击2D 双击输入栏位置 修改输入框尺寸及位置 放大字体 修改默认输入文字 发现中文字变成了口口口口 原因是新UI系统不支持中文&#xff0c;解决这个问题需要更换字体 并且修改输入时字体大小 我们取电脑中找Fon…

劳易测合作伙伴Pizzato P-KUBE Lite安全把手新品来袭!

劳易测合作伙伴Pizzato全新 P-KUBE 系列再添新成员&#xff01;——P-KUBE Lite安全把手&#xff0c;进一步拓展了应用范围。新产品采用高聚酯材质制成&#xff0c;具备卓越的抗冲击性能&#xff0c;确保在严苛环境下把手的耐用性。把手的设计既符合人体工程学又兼具功能性&…

linux中的调试工具gdb

目录 1.背景知识补充 2.使用 知识补充 1.背景知识补充 1.gcc下编译默认是release方式发布的&#xff0c;无法直接进行调试 如果要以debug方式发布&#xff0c;需要携带-g 可以使用grep查询 因为携带debug信息&#xff0c;其文件体积要大一些 2.使用 1.gdb 可执行程序 …

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…

【ajax基础03】常用ajax请求方法和数据提交以及axios错误处理

目录 一&#xff1a;请求方法 什么是请求方法&#xff1a; 常见请求方法如下 二&#xff1a;axios中应用 语法格式&#xff1a; 案例&#xff1a; axios错误处理 三&#xff1a;如何赚钱 一&#xff1a;请求方法 什么是请求方法&#xff1a; 浏览器对服务器资源&…

Android Media Framework(八)OMXNodeInstance - Ⅰ

OpenMAX框架的学习有两大难点&#xff0c;一是组件的状态切换与buffer的流转过程&#xff0c;这部分内容我们已经在IL Spec中学习过了&#xff1b;二是OMX组件使用的buffer类型与buffer分配过程&#xff0c;这一节我们来重点剖析OMX组件使用的buffer类型。 1、引言 在实际应用…

提取图像主色调

依赖 Pillow 库。 提取图像主色调&#xff0c;直接上代码&#xff1a; from PIL import Imagedef extract_main_color(img_path: str, delta_h: float 0.3) -> str:"""获取图像主色调Args:img_path: 输入图像的路径delta_h: 像素色相和平均色相做减法的绝…

17.RedHat认证-Ansible自动化运维(下)

17.RedHat认证-Ansible自动化运维(下) 这个章节讲ansible的变量&#xff0c;包括变量的定义、变量的规则、变量范围、变量优先级、变量练习等。 以及对于tasks的控制&#xff0c;主要有loop循环作业、条件判断等 变量 介绍 Ansible支持变量功能&#xff0c;能将value存储到…

记录react实现选择框一二级联动出现的问题

需求&#xff1a;用户在选择第一个选择框的选项后&#xff0c;第二个选择框的选项会根据第一个选择框的选择动态更新。如图所示 出现的问题 一级分类选择之后二级分类没有数据&#xff0c;第二次重新选择一级分类的时候&#xff0c;二级分类就会有值。 第一次点击截图&#x…

MongoDB数据库的安装和删除

MongoDB数据库的删除和安装 1、删除MongoDB数据库2、下载MongoDB数据库1)、自定义安装2)、注意可视化可以取消勾选 1、删除MongoDB数据库 没有下载过的&#xff0c;可以直接跳到下面的安装过程↓ 我们电脑中如果有下载过MongoDB数据库&#xff0c;要更换版本的话&#xff0c;其…

IntelliJ IDEA2024 for Mac Java代码编辑器

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件&#xff08;适合自己的M芯片版或Intel芯片版&#xff09;&#xff0c;将其从左侧拖入右侧文件夹中&#xff0c;等待安装完毕2、应用程序显示软件图标&#xff0c;表示安装成功3、打开访达&#xff0c;点击【文…

基于Java蛋糕甜品商城系统设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f;感兴趣的可以先收藏起来&#xff0c;还…