P2P Downloader
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的更多相关文章
- 全本软件白名单 Quanben Software Whitelist
Windows应用软件 Windows Applications (TBU) 全本推荐微软Windows 10操作系统 Quanben recommends Microsoft Windows 10 ...
- .Net Core 应用方向 图谱
.Net Core 应用方向 图谱, 如下图 : 大规模并行计算 是 大数据 和 人工智能 的 基础, 是 未来 大计算能力 的 基础, 网格计算 是 未来 大计算能力 的 一个 分支 . 所以, ...
- 分享“12306 P2P平台”创业Idea
结合云平台抢票,社区,P2P等性质,实施供求抢票平台,能有效提高和整合抢票市场,抢票优势以杜绝黄牛,给散户提供更有利的抢票途径.本在11月计划实施,后去搞比特币,故分享摘要集思广益. 背景 ...
- Socket编程实践(3) 多连接服务器实现与简单P2P聊天程序例程
SO_REUSEADDR选项 在上一篇文章的最后我们贴出了一个简单的C/S通信的例程.在该例程序中,使用"Ctrl+c"结束通信后,服务器是无法立即重启的,如果尝试重启服务器,将被 ...
- R可视化lend_club 全球最大的P2P平台数据75W条
lend_club 全球最大的P2P平台2007~2012年贷款数据百度云下载. 此文章基于R语言做简单分析. rm(list=ls()) #清除变量 gc() #释放内存 step1 考虑到后续分析 ...
- 浅谈P2P金融
自从李总理开发互联网大会,提出“互联网+”,好像与互联网相在的所有事情都火起来了.上至80岁的老头,下至十多岁的孩童,都知道了这个词“互联网+”.虽然大家可能对”互联网+“的概念都只是一支半解,但是像 ...
- 王宝强新片P2P风波持续发酵,互金真的前途未卜?
王宝强离婚风波还未完全结束,一波未平一波又起,新片又引来话题爆点,其自导自演的电影<大闹天竺>陷P2P平台集资的新闻占据各大媒体头条. 该P2P平台为湖北武汉一家P2P互联网金融理财平台& ...
- p2p tcp nat 原理图+源码(原创)
现今网上p2p的 udp nat穿透 文章 多如牛毛, p2p tcp nat的文章寥寥无几 ,up主研究了几天 终于有所收获,特来向大家分享,请大家多多支持! 1.首先你要有台外网服务器 或者 电信 ...
- p2p网贷平台设计简析
以我之前主持开发的一个商业产品:p2p网贷为例进行分析.整个的概况,可以参见:www.huixinp2p.com(目的只会技术交流) 界面可以直接参考前期博客:http://www.cnblogs.c ...
随机推荐
- Centos7部署kubelet(六)
1.二进制包准备将软件包从linux-node1复制linux-node2.linux-node3中去 [root@linux-node1 ssl]# cd /usr/local/src/kubern ...
- L320 What late-night snacking has to do with sleep
What late-night snacking has to do with sleep Light-night snacking isn’t just something college stud ...
- L295 how to turn down a job but keep a good relationship with the hiring manager
Let’s say you’re on the hunt for a new job. Three interviews in, you realize it’s not the place for ...
- 点击图片video全屏
<!doctype html> <html> <head> <meta charset="utf-8" /> <title&g ...
- 基于链路的OSPF简单口令认证
实验要求:掌握基于链路的OSPF简单口令认证 拓扑如下: 配置如下: R1enable configure terminal interface s0/0/0ip address 192.168.1. ...
- 如何在VMware中安装Linux系统
这篇文章主要讲述如何在VMware12中安装RHEL6.9Linux操作系统 步骤一: 打开VMware软件,在主页中点击创建新的虚拟机或者点击左上角文件,在列表中点击新建虚拟机,如图: 步骤二: 点 ...
- Codeforce 9C - Hexadecimal's Numbers
One beautiful July morning a terrible thing happened in Mainframe: a mean virus Megabyte somehow got ...
- jQuery中AJAX同步如何实现?
jax请求默认的都是异步的如果想同步 async设置为false就可以(默认是true) var html = $.ajax({ url: "some.php", async: ...
- 普通new和placement new的重载
对于自定义对象,我们可以重载普通new操作符,这时候使用new Test()时就会调用到我们重载的普通new操作符. 示例程序: #include <iostream> #include ...
- Java 面试题 —— java 源码
1. 静态工厂方法 静态工厂方法不必在每次调用它们的时候都创建一个新的对象: Boolean.valueOf(boolean): public final class Boolean { public ...