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,一经查实,立即删除!

相关文章

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

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

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

上篇我们讲述了企业大文件传输的重要性以及镭速在传输方面的优势&#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;二是注意力机制的二次方时间复杂度导致计算成…

活动预告|探索 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…

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

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

【自然语言处理系列】Python 字符串操作技巧:清理、替换与合并

在编写Python程序时&#xff0c;字符串处理是一项常见的任务。了解如何有效地清理、修改和合并字符串对于数据预处理、文本分析和日常编程都至关重要。本文将引导您通过一系列实用的示例来掌握Python中字符串的核心操作&#xff0c;包括去除不需要的空格和特殊字符、替换文本中…

【机器学习项目实战(二)】基于朴素贝叶斯的中文垃圾短信分类

完整代码、数据集和相应的报告 链接已经放在了正文最下方, 供大家参考学习 摘要 ​ 本文探讨了中文垃圾短信分类的问题,通过收集实际数据集,运用多种机器学习算法进行分类,并对比了不同算法在垃圾短信分类任务上的性能。本研究旨在提高中文垃圾短信的识别准确率,为构建更…

java溯本求源之基础(二十五)之--ArrayList常用方法介绍

1. 介绍 1.1简介 ArrayList ArrayList 是 Java 集合框架中的一个类&#xff0c;位于 java.util 包中。它实现了 List 接口&#xff0c;提供了一个动态数组的功能。与普通数组不同&#xff0c;ArrayList 可以在需要时自动调整其容量&#xff0c;以容纳更多的元素。这使得它非常…

鸣潮基于虚幻引擎4的多平台效果和性能优化实践

《鸣潮》基于虚幻引擎4的多平台效果和性能优化实践 | 王宏波 库洛游戏 文章目录 《鸣潮》基于虚幻引擎4的多平台效果和性能优化实践 | 王宏波 库洛游戏Why Deferred Shading移动端高质量的TAAU渲染流程Ghost和Flicker优化&#xff0c;一些图像空间算法的融入动静态像素的差异处…

第三代全智能AI无人直播系统:销售变现的革新利器

随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;已经(keJ0277)逐渐渗透到我们生活的方方面面。特别是在直播销售领域&#xff0c;第三代全智能AI无人直播系统的出现&#xff0c;正成为销售变现的革新利器&#xff0c;引领着行业的新一轮变革。一、全智能AI无…

mysql数据库的管理

MySQL数据库管理 mysql数据文件 存放在初始化时定义的datadir 该目录下放置三种后缀文件 .frm 与表相关的元数据&#xff08;meta&#xff09;&#xff0c;表结构的定义信息等。 .MYD mylSAM存储引擎专用 .MYI mylSAM存储引擎专用 MySQL语言类型 DDL&#xff08;数据定义语言…

App推广新突破!Xinstall无注册码方案,一键解决您的获客难题

在互联网的浪潮中&#xff0c;App推广与运营面临着前所未有的挑战。随着流量红利的衰退&#xff0c;如何高效、精准地触达用户&#xff0c;提升用户留存和转化率&#xff0c;成为每个企业都必须面对的问题。在这个关键时刻&#xff0c;Xinstall以其无注册码的解决方案&#xff…