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. 用MyEclipse开发REST Web Service

    MyEclipse 在线订购年终抄底促销!火爆开抢>> MyEclipse最新版下载 使用MyEclipse开发RESTWeb服务来放大您的Web应用程序.在本教程示例中,您将创建一个简单 ...

  2. 20165214 2017-2018-2 《Java程序设计》课程总结

    20165214 2017-2018-2 <Java程序设计>课程总结 每周任务链接 预备作业1:我期望的师生关系 预备作业2:C语言基础调查和java学习展望 预备作业3:Linux安装 ...

  3. TensorFlow函数:tf.lin_space

    函数:tf.lin_space 别名: tf.lin_space tf.linspace lin_space( start, stop, num, name=None ) 参见指南:生成常量,序列和随 ...

  4. array_multisort

    项目中用到这个函数了 ,起初对这个函数一直是懵逼状态,文档都看的朦朦胧胧的 网上无意间看到这篇文章 ,写的超级详细,收藏了 . 当然要先放原地址:https://www.cnblogs.com/WuN ...

  5. 并发的HTTP请求,apache是如何响应的,以及如何调用php文件的

    作者:酒窝链接:https://www.zhihu.com/question/23786410/answer/153455460来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  6. TDate赋值给Variant时注意的问题

    //Delphi 10.3.1 32bit, Win 7 32bit procedure TForm1.btnTimeToVariantClick(Sender: TObject); var d:TD ...

  7. Android大作业 --音乐播放器

    1.项目成员(本次作业主要对上一次的音乐播放器进行完善) 韦家城 学号:1600802026 班级:161  博客:https://www.cnblogs.com/ln9969cc/ 邓乾尧 学号:1 ...

  8. Java并发机制和底层实现原理

    Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码转化为汇编指令在CPU上执行.Java中的并发机制依赖于JVM的实现和CPU的指令. Java语言规范第三版中 ...

  9. MySQL篇,第四章:数据库知识4

    MySQL 数据库 4 数据备份(在Linux终端操作) 1.命令格式 mysqldump -u用户名 -p 源库名 > 路径/XXX.sql 2.源库名的表示方式 --all-database ...

  10. Ubuntu配置Github并且新建仓库push代码,从已有仓库clone代码,并且push

    Github是一款良好的管理代码的工具,使用的时候需要现在Ubuntu上进行配置,下面的内容分为三个部分,第一部分讲述如何在之前从未配置github的电脑配置github,第二部分讲述如何在远程新建一 ...