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. cxf http 代码自动生成

    1.下载 cxf 直接进入镜像下载http://mirrors.tuna.tsinghua.edu.cn/apache/cxf/3.1.12/apache-cxf-3.1.12.zip 2.配置 CX ...

  2. Office 365 企业应用以及服务概览 分享记录

    博客地址:http://blog.csdn.net/FoxDave 分享时间: 2017年9月14日 分享地点: 部门内部 参与人数: 16人 分享内容: 讲解微软MVP项目计划的相关内容:讲解O ...

  3. synchronized(八)

    package com.bjsxt.base.sync006;/** * 同一对象属性的修改不会影响锁的情况 * @author alienware * */public class ModifyLo ...

  4. select标签的相关操作,选中,获取option的值,二级联动

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  5. HTML Viewer展示不同字体

    过去有相关帖子提到Power BI可以使用不同字体.小悦也最近也找了一些方法尝试.如果大家想要在Power BI展示更多类型的字体,可以使用HTML Viewer自定义控件,增加额外的字体.大家可以利 ...

  6. 终极C语言指针

    // ex1.cpp : Defines the entry point for the console application. // #include "stdafx.h" # ...

  7. 异步测试celery

    django异步请求: Django从一个http请求发起,到获得响应返回html页面的流程大致如下:http请求发起 -- http handling(request解析) -- url mappi ...

  8. python scrapy 爬虫实例

    1 创建一个项目 scrapy startproject basicbudejie 2 编写爬虫 import scrapy class Basicbudejie(scrapy.Spider): na ...

  9. ajax及其工作原理

    1.关于ajax的名字 ajax 的全称是Asynchronous JavaScript and XML,其中,Asynchronous 是异步的意思,它有别于传统web开发中采用的同步的方式. 2. ...

  10. LG4213 【【模板】杜教筛(Sum)】

    sum\(\mu\)求法 设 \[S(n)=\sum_{i=1}^n \mu(i)\] 回顾公式 \[\sum_{d|n}\mu(d)=[n=1]\] 对\(n\)求和 \[\sum_{i=1}^n\ ...