一、概要

1、需求定档

功能:让网络上任意两台主机之间可以互相下载共享文件

2、概要设计

(1)网络上任意两台主机共享
首先要直到在网络上有哪些主机能够建立共享关系
(2)从一个指定的主机上去下载自己想要的文件,也可以将自己的文件提供给别人下载

3、模块功能框架

4、功能流程图

二、详细讲述P2P下载器

1、包含模块

  • 客户端
    查看网络上有哪些共享主机
    向网络中广播配对请求,得到响应
    获取指定主机文件列表
    向指定主机发送获取列表请求
    从指定主机上下载文件
    向指定主机发送下载指定文件的请求
  • 服务端
    针对客户端的功能做出正确响应提供服务即可

2、客户端功能流程

(1)获取网卡信息——》获取主机IP+MASK——》得到局域网IP列表
(2)向所有IP发送配对请求——》得到在线主机列表
(3)选择一个主机IP发送获取文件列表请求——》得到获取到的共享的文件列表
(4)从这个主机IP 下载指定的共享主机

3、服务端功能流程

(1)接收到主机配对请求,则做出一个200响应(说明主机在线)
(2)接收到文件列表请求

  • 检测获取指定的共享目录下的文件信息
  • 将所有文件名组织成http相应正文
    (3)接收到指定的文件下载请求
  • 通过文件名检测文件是否存在
  • 检测文件受否是一个普通文件
  • 如果存在并且正确,则打开文件,获取文件数据,作为http响应正文响应给客户端

三、项目中用到的重要技术

1、分块传输

(1)断点续传
网页上的断点续传其实就是通过分块下载完成的。
断点续传:当正在下载文件的时候,突然网络中断,导致文件没有下载完毕而失败,等到下次网络通畅的时候,可以继续从上次断开的位置开始重新下载文件。而不需要重新将完整的文件下载一次,来提高异常情况下文件的传输效率。
(2)断点续传是如何实现的?
文件下载过程中单独开启一个文件,每隔一会儿就记录一下当前已经下载了多少数据,这时如果网络断开,下次下载就知道从哪里下载了。下次继续下载的时候就需要告诉服务端到底应该从哪里开始传输,这样服务端知道从哪里开始传输数据,就不需要对已经传输过的数据重新二次传输。
(3)但是在此项目中暂不实现断点续传,会用到分块传输
因为当前我们的文件传输都是一次性读取/写入文件数据,相当于定义了一个与文件大小相同的buffer,这时如果文件大小非常大,则会造成严重问题:
(1)内存有点不够用,则会大量使用交换分区交换内存,而这种大量内存交换会造成效率低下。
(2)内存耗尽,程序崩溃。
为了解决以上问题,最好使用分块传输。(每次只向服务器请求文件的一部分)

2、网络穿透原理

(1)当前所写的P2P下载器项目是一个局域网的P2P,无法实现整个网络的p2p。因为局域网之间无法跨网络进行数据传输
就算已知对方的私网地址,但是因为我们并没有网络直连,因此无法直接通信。所以局域网之间想要进行通信就要借助网络穿透技术实现
(2)网络穿透技术实现是让两个局域网主机之间不需要经过一个中转服务器进行数据转发而实现通信。即,借助一个公网服务器(但是这个公网服务器并不实现数据的转发)

代码实现P2P文件快传

【项目】P2P文件快传相关推荐

  1. windows 文件快传

    网盘的分享功能不错,下载文件时要登录.转存.甚至要启动客户端下载,下面为大家整理一些高质量的文件快传工具,都是web版,简单快捷. 1.1 Muse Transfer 网址: https://muse ...

  2. VUE 项目大文件上传下载解决方案

    之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...

  3. Web项目中文件上传Filter处理

    最近遇到一个文件上传的项目,而且在这个项目中遇到的文件上传的次数还是挺多的,所以就写了个Filter过滤器.这一个想法还是从一本书上看到的,所以原则上说并不是在下原创.不过因为补充了一点东西,所以,嘿 ...

  4. 前后端分离微服务管理系统项目实战SaaS-HRM项目(九)——文件上传与PDF报表入门

    文章目录 九.文件上传与PDF报表入门 1.图片上传 <1>.Data URL (1).概述 (2).入门 (3).基本原理 (4).优缺点分析 <2>.实现用户头像上传 2. ...

  5. php文件快传,文件分享网站(快传)

    本人不会 PHP 框架,所以直接码代码了,大神轻打! 模仿这个网站做的, 文件空投 简单的实现了一遍,因为就是文件上传,文件秘钥下载. PHP 的源码,我没用数据库,因为想着简单的实现,就用 Json ...

  6. Java项目实现文件上传FTP

    目录 一.介绍 二.pom依赖及配置文件 三.Controller控制层接收文件 四.Service业务层 五.上传测试 六.如果参数是Base64编码格式的文件 一.介绍 街道一个需求,需要提供一个 ...

  7. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(32)-swfupload多文件上传[附源码]...

    原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(32)-swfupload多文件上传[附源码] 文件上传这东西说到底有时候很痛,原来的asp.net服务器 ...

  8. 电脑手机wifi互传文件_安卓手机文件互传

    怎么不借用第三方工具,安卓手机实现相互文件快传呢? 苹果: 首先不用多说,苹果可以使用Air Drop功能,苹果全家桶可以无障碍互传. 长期以来,除开微信和QQ,不同品牌安卓手机互传文件依靠的途径只有 ...

  9. SpringBoot 2.x (3):文件上传

    文件上传有两个要点 一是如何高效地上传:使用MultipartFile替代FileOutputSteam 二是上传文件的路径问题的解决:使用路径映射 文件路径通常不在classpath,而是本地的一个 ...

最新文章

  1. python会不会出现内存泄露_Python内存泄漏和内存溢出的解决方案
  2. 栈与队列4——用一个栈实现另一个栈的排序
  3. 2021年春季学期-信号与系统-第四次作业参考答案-MATLAB实验题2
  4. 【知识图谱】人工智能技术最重要基础设施之一,知识图谱你该学习的东西
  5. java关于包的叙述_Java中构造方法,包的引用,final,super等词的概括
  6. 世界坐标系,相机坐标系和图像坐标系的转换(Python)
  7. Java EE6 CDI,命名组件和限定符
  8. 第一 二章 计算机基础知识,[精品]第二章-计算机基础知识.doc
  9. json qt 解析数组_Qt中 UI文件是如何转成C++文件的
  10. [转载].NET开发常用的10条实用代码
  11. sublime-text-3-build-3207 破解+注册码
  12. 被马斯克热炒的人形机器人Optimus“擎天柱“,中国厂商或后来居上
  13. 中外文献图书网址汇总
  14. AE粒子跟随手势特效
  15. 【翻译】国际标准 IEC TR 63145-22-10 |AR类型的特定测量方法. 光学性能
  16. html中相对位置与绝对位置介绍
  17. 简介雅可比矩阵(Jacobian)
  18. 基于matlab的数字下变频器的设计与仿真应用,基于matlab的简单数字下变频器的设计...
  19. oracle truncate很慢,ORACLEl数据库truncate分区表很慢问题 | 信春哥,系统稳,闭眼上线不回滚!...
  20. javac编译多个不同目录下的java源文件

热门文章

  1. Voronoi Noise
  2. 皮肤范围检测matlab思路,一种基于S21相位的无创血糖浓度检测方法与流程
  3. 天文学中的常用坐标系
  4. 免费网站管理工具-全自动网站管理
  5. premiere视频剪辑关于导出视屏分辨率的问题
  6. 刚创建的springboot项目启动后访问controll报404
  7. Java结果集以关闭_显示结果集已关闭,正确顺序是什么
  8. 函数极限唯一性的证明和求极限的一些想法
  9. 【正点原子FPGA连载】第十四章 IP核之RAM实验 -摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0
  10. 蓝牙耳机降噪功能哪款好?盘点四款降噪效果好的蓝牙耳机