P2P Downloader , 当然就是 P2P 下载器了 , 就是和 比特精灵 差不多的那种 。  ^ ^

不过这个项目没有代码 , 懒得写代码了 , 就文字描述一下吧 。   ^ ^

P2P 下载呢 , 主要就是把要下载的文件 分割 为一个一个的 数据块(Data Block), 假设我们定义每个 数据块 是 1K , 假设要下载的文件是 1M , 那么就会分割成 1024 个 数据块 。 接下来再把 数据块 封装成 数据包(Data Packet) , 数据包 当然要包含 数据块 , 除此以外 , 还会包含 头(Head) , 头里会包含一些数据块的信息 ,比如 数据块的序号(Seq no) , 就是 第几个数据块 , 这是 客户端 接收到 数据块 把 数据块 拼成文件时 需要的,还有就是 数据块 的 长度 , 因为如果一个文件的 大小 小于 数据块 的 标准大小 , 那么 数据块 的 长度 就会小于 标准大小 。 或者 数据块 是 最后一个数据块 , 那么同样也可能 长度 小于 标准大小 。

头的信息主要就这 2 项 。 准备好数据包以后 , 就可以下载了 , 客户端 只要 把 数据包 下载下来 , 根据 序号(Seq no) 拼成一个文件就可以 。

当然 , 对于 P2P 而言 , 每个 客户端 也是 服务器 。

那么 ,客户端 怎么知道去哪里下载呢 ? 刚开始的时候 。 这就是 “发布种子” 和 “做种” 的 问题 啦 。

P :  我不太喜欢 “做种” 这个词 , 但又想不到其它的词来描述 , 就先用着了 。

种子是什么呢 ? 就是要下载文件的 数字摘要 , 也可以说是 Hash 值 。 用于标识 这个文件 。 客户端 下载到 数据包 可以根据这个 Hash 值来确认 数据包 是否是这个文件的 。 哦 , 这样的话 , 数据包 的 头里还要增加一项 , 就是这个 Hash 值 。

另外, 种子 里 还需要包含 做种 的 服务器 地址(IP 端口), 这个 服务器 就是 客户端 访问的 第一个 服务器 。 从这个 服务器 上 , 客户端 可以获取到 其它的 服务器节点(其它正在下载的客户端) , 这样 客户端 就可以从 多个 服务器 节点 下载 数据包 , 拼成一个文件 。 从每个 服务器节点 上 , 客户端 又可以获取 这些 服务器节点 知道的 服务器节点 , ……    然后 。

所以 , 这就是 种子文件 , 种子文件 发布出来以后 , 服务器 就开始 “做种” , 就是上面说的 , 按照 种子文件 里 提供的 服务器地址 监听 , 监听到 客户端 请求 , 可以给 客户端 返回 数据包 和 服务器节点列表(其它正在下载的 客户端)。

然后 , 就是这样了 。

按照这个逻辑可以写 P2P Downloader , 其中 网络通信 (远程通信 RPC) 的部分 , 可以用 MessageRPC 。 MessageRPC 是我写的另一个项目 :  https://www.cnblogs.com/KSongKing/p/9455417.html

P2P Downloader的更多相关文章

  1. 全本软件白名单 Quanben Software Whitelist

    Windows应用软件 Windows Applications (TBU) 全本推荐微软Windows 10操作系统 Quanben recommends Microsoft Windows 10 ...

  2. .Net Core 应用方向 图谱

    .Net Core 应用方向 图谱,  如下图 : 大规模并行计算 是 大数据 和 人工智能 的 基础, 是 未来 大计算能力 的 基础, 网格计算 是 未来 大计算能力 的 一个 分支 . 所以, ...

  3. 分享“12306 P2P平台”创业Idea

      结合云平台抢票,社区,P2P等性质,实施供求抢票平台,能有效提高和整合抢票市场,抢票优势以杜绝黄牛,给散户提供更有利的抢票途径.本在11月计划实施,后去搞比特币,故分享摘要集思广益.     背景 ...

  4. Socket编程实践(3) 多连接服务器实现与简单P2P聊天程序例程

    SO_REUSEADDR选项 在上一篇文章的最后我们贴出了一个简单的C/S通信的例程.在该例程序中,使用"Ctrl+c"结束通信后,服务器是无法立即重启的,如果尝试重启服务器,将被 ...

  5. R可视化lend_club 全球最大的P2P平台数据75W条

    lend_club 全球最大的P2P平台2007~2012年贷款数据百度云下载. 此文章基于R语言做简单分析. rm(list=ls()) #清除变量 gc() #释放内存 step1 考虑到后续分析 ...

  6. 浅谈P2P金融

    自从李总理开发互联网大会,提出“互联网+”,好像与互联网相在的所有事情都火起来了.上至80岁的老头,下至十多岁的孩童,都知道了这个词“互联网+”.虽然大家可能对”互联网+“的概念都只是一支半解,但是像 ...

  7. 王宝强新片P2P风波持续发酵,互金真的前途未卜?

    王宝强离婚风波还未完全结束,一波未平一波又起,新片又引来话题爆点,其自导自演的电影<大闹天竺>陷P2P平台集资的新闻占据各大媒体头条. 该P2P平台为湖北武汉一家P2P互联网金融理财平台& ...

  8. p2p tcp nat 原理图+源码(原创)

    现今网上p2p的 udp nat穿透 文章 多如牛毛, p2p tcp nat的文章寥寥无几 ,up主研究了几天 终于有所收获,特来向大家分享,请大家多多支持! 1.首先你要有台外网服务器 或者 电信 ...

  9. p2p网贷平台设计简析

    以我之前主持开发的一个商业产品:p2p网贷为例进行分析.整个的概况,可以参见:www.huixinp2p.com(目的只会技术交流) 界面可以直接参考前期博客:http://www.cnblogs.c ...

随机推荐

  1. easyui弹框后销毁当前tab弹框不显示的解决方式

    var id=$("#pageId").val(); var message = "{\"id\":" + id+ ",\&quo ...

  2. capjoint一些生成文件的解释

    王亮 // :: https://github.com/wangliang1989/oh-my-cap/blob/dev/docs/result.md 这是cap_plt.pl的输入文件.out的各项 ...

  3. 杭电多校第三场 A Ascending Rating

    Problem Description Before the start of contest, there are n ICPC contestants waiting in a long queu ...

  4. 基于Scrapy-Redis和docker技术在单机上构建分布式爬虫

    准备工作: 安装docker https://www.docker.com/docker-ubuntu 选择ce版本 通过docker pull 下载基础镜像,ubuntu16.04, redis, ...

  5. PODOFO编译

    由于LibHaru库只能创建PDF,所以只能换了. PODOFO项目的依赖项目有: FreeType2: https://sourceforge.net/projects/freetype/files ...

  6. PMS5003ST+Arduino Nano OLED屏显示

    整合OLED显示和PMS5003报数 #include <Arduino.h> #include <pms.h> /////////////////////////////// ...

  7. ubuntu 安装 mysql 的正确姿势

    1.下载官方提供的mysql-apt-config.deb包进行APT源设置,下载地址:https://dev.mysql.com/downloads/repo/apt/ 2. // 将 mysql- ...

  8. Tomcat9配置SSL连接

    .首先生成数字证书: 使用JDK的keytool命令,生成证书(包含证书/公钥/私钥)到D:\ssl.keystore:keytool -genkey -keystore "D:\ssl.k ...

  9. Power BI十大视觉效果,知多少?

    Power BI十大视觉效果: 图表滑块 响应式布局 一键更改方差计算 一键排序 我们的最爱:小倍数! 瀑布图中的轴断裂 层次表(完全响应) HICHERT博士的IBCS®原生支持 分段图表 - 可视 ...

  10. Spring Boot 揭秘与实战(五) 服务器篇 - 其他内嵌服务器 发表于 2017-01-03 | Spring框架 | Spri

    文章目录 1. Jetty 的切换 2. Undertow的使用 Spring Boot 可选择内嵌 Tomcat.Jetty 和 Undertow,因此我们不需要以 war 包形式部署项目.< ...