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. Fedora的一些个人配置

    0,老传统 yum install screenfetch 1,关闭蜂鸣器 edit /etc/bashrc setterm -blength 0#setterm -bfreq 10 #这个可以设置声 ...

  2. netty源码理解(二) serverstrap.bind()

    eventloop是一个线程,里面有一个executor封装了一个线程工厂,在启动的时候启动一个线程,传入的实现了runnable的内部类,里面调用了eventloop的run方法.

  3. FutureTask

    因为实现了runnable接口,所以重写了run方法 Future接口如果用在多线程中,实现类一般是有一个volatile的属性,用来标志状态,比如state,如果事情做完了,那么会设置state为成 ...

  4. ALTER语句重命名,重新定义和重新排序列

    该CHANGE,MODIFY和 ALTER子句可以改变现有列的名称和定义.他们有这些比较特征: CHANGE: 可以重命名列并更改其定义,或两者都可以. 具有更多的能力MODIFY,但是以某些操作的便 ...

  5. python自学第三天,列表

    1.列表 names=[] #这就是一个空列表 names=[1,5,2,3,4,5]#列表是用的中括号,每个元素是用逗号分开的.列表里面的元素是可以重复的. names[-1]#表示的是取列表的最后 ...

  6. PHP中session_start 函数详解使用方法

    一.官方 session_status() 返回值为: PHP_SESSION_DISABLED 会话是被禁用的. PHP_SESSION_NONE 会话是启用的,但不存在当前会话. PHP_SESS ...

  7. Django is not importable in this environment

    1.由于把venv给忽略了,所以显示找不到django.  2.在.gitignore中加入了 venv\会导致,在此git目录下,用pycharm 创建的项目会自动在 file types中的地方加 ...

  8. href和src的区别

    虽然一直在用这两个属性,但是一直没有具体的去区分和了解这两个属性的区别,今天就来看看 href标识超文本引用,用在link和a等元素上,href是引用和页面关联,是在当前元素和引用资源之间建立联系 s ...

  9. win7英文版

    下载个系统,不是一堆木马,就是一堆病毒:相对来说,我还是倾向于相信国外的镜像. https://pcriver.com/operating-systems/windows-7-ultimate-iso ...

  10. Ubuntu16.04阿里云源

    16.04源 deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse deb http://m ...