什么是P2P(peer to peer)?

跟P2P对应的是传统的客户端-服务器(C/S或B/S)体系结构,这种体系结构就是客户端发送请求,服务器端给予响应。但是随着客户端不断的增加,成了服务器端崩溃的主要原因。增加服务器的功能或者资源,增加更多的服务器可以缓解这种情况,但除此之外,对等网络(P2P)可以从本质上避免服务器的崩溃问题。
首先,先了解一下文件共享技术(如BitTorrent)的工作方式:
许多人同时从一个服务器上下载一个资源,往往会使服务器的负载很重。而P2P技术不把资源直接从服务器上发送给客户端,而是先把文件仅分发给几个客户端,另外的客户端可以从已经存在该资源的客户端上下载,更多的客户端可以从这些二级客户端上下载,以此类推。实际上,这个过程把文件分解为几个块,再把这些块分解到客户端上,一些客户端从服务器上下载文件,另外的客户端从其他客户端上下载,所以这个过程会更快完成。
但是P2P体系存在一些问题:客户端如何检测其他客户端的存在?如何定位其他客户端包含的文件块?如何进行客户间的通信?
所以每个P2P网络应用程序的客户端能够完成以下操作:
1.它必须能够发现其他客户端
2.它必须能够连接其他客户端
3.它必须能够与其他客户端通信
对于发现问题,有两个明显的解决方案:
a.在服务器上保存客户端的列表,这样客户端可以获得该列表,并联系其他客户端;
b.使用一个基础结构(比如本文要说的PNRP)。
对于连接问题,需要考虑P2P应用程序使用的网络的整体结构。
对于通信问题,利用通信协议(Tcp/ip,Http)来解决。
发现、连接和通信是所有P2P实现方案的核心。
.NET下如何实现?
发现:使用System.Net.PeerToPeer类型和PNM进行发现;
连接:使用PNRP进行连接;
通信:使用WCF进行通信。
P2P解决方案适用于以下类型应用程序:
1.内容发布应用程序,如文件共享应用程序;
2.合作应用程序,如桌面共享和共享白板;
3.多用户通信,允许用户之间直接通信和交换数据,而不是通过服务器通信;
4.分布式处理应用程序,处理海里数据;
5.Web 2.0应用程序,在下一代动态web应用程序中合并上述一部分或全部功能。
接下来介绍一下PNRP服务和PNM服务,它们是windows下实现P2P的基础服务。   
PNRP(Peer Name Resolution Protocol,对等机名称解析服务),用于发布和解析对等机;
PNM(Peer Near Me)服务器,用于定位本地的对等机。
PNRP云(实际上是由一个种子服务器维护,该服务器维护至少一个对等机记录),PNRP可以在云中注册对等机记录,供云中其他对等机使用。
如何构建P2P应用程序呢?
使用System.Net.PeerToPeer和System.Net.PeerToPeer.Collaboration命名空间里的类。
     一、P2P资源发布过程

资源发布就是资源所有者向P2P网络云中注册资源的过程,它分为以下3个步骤。

(1)  创建一个P2P关键词对象
(2)  创建一个关联到指定云的注册对象,
(3)    进行注册

下面的代码演示了如何向所有可用云中注册“0.test”这个名称,并将这个名称关联到本机的6000端口(通常同时监听这个端口,以响应资源访问者的请求)的过程

PeerName  pn = new PeerName("test", PeerNameType.Unsecured);
PeerNameRegistration  pnr = new PeerNameRegistration(pn, 6000,   Cloud.Available);
pnr.Start();

二、撤销已发布到云中的资源

只需要调用注册对象的stop方法,代码如下。
pnr.Stop();

三、资源的发现:

就是在云中搜索指定的关键词,分以下三个步骤。
(1)  .创建一个待搜索的名称对象。
(2) .创建一个名称解释器对象。
(3) .从指定云中检索此名称对象。
下面代码演示了如何从所有可用云中检索名称“0.test”的过程,此过程最多返回10条符合要求的记录。
PeerName  searchname =new PeerName("0.test");
PeerNameResolver  resolver = new PeerNameResolver();
PeerNameRecordCollection  results= resolver.Resolve(searchname, Cloud.Available,10);

四、获取此名称对应的资源:

按P2P名称检索到相应的资源名称后,假设保存在results集合对象中,通过以下方法就可以获取此名称对应的资源了。
foreach (PeerNameRecord record in results)
{
      //获取资源所在的位置
       foreach(IPEndPoint endpoint in record.EndPointCollection)
       {
       //对方通常在监听这个IPEndPoint,与之发起连接即可与之通信或其它交互了
       }
       //获取资源对应的数据
       byte[] remoteresource=record.Data;

}

转载于:https://www.cnblogs.com/FelixBlog/archive/2013/03/29/2989831.html

【原】P2P应用的探究相关推荐

  1. [原] KVM 虚拟化原理探究(6)— 块设备IO虚拟化

    目录 KVM 虚拟化原理探究(6)- 块设备IO虚拟化 块设备IO虚拟化简介 传统块设备架构 块设备IO协议栈 块设备IO流程 块设备IO虚拟化 总结 KVM 虚拟化原理探究(6)- 块设备IO虚拟化 ...

  2. 图网络可解释性(2)

    Stanford大佬Rex Ying的文章:<GNNExplainer: Generating Explanations for Graph Neural Networks> 摘要 传统非 ...

  3. 迅雷7优化,删除组件,去广告,屏蔽上传,高速通道,下载

    迅雷(Thunder)7.1.8.2300,可以开启高速通道, 压缩包里有两种安装文件,安装.inf.卸载.inf属于原版,但是不屏蔽上传 安装.bat,安装_Win7x64.bat,卸载.exe不属 ...

  4. 浇灌迅雷幸福树 抽奖可领取会员3天

    迅雷幸福树作为原p2p分享率的升级,更加形象的记录了用户上传和下载时所产生的流量,将用户贡献的上传流量记为阳光值,用于抽取奖品作为对用户贡献流量的回馈: 将下载流量记为成长值用于幸福树等级的提升,使用 ...

  5. 迅雷下载原理和P2p技术

    1. 迅雷的盗链(盗链其他网站的资源)       迅雷记录下载地址并将其存在自己的服务器,以后下载同样的资源时自动从所有可用的下载地址连接,保证用户在下载链接甚至是死链接的情况下,也可以从镜像服务器 ...

  6. 原力P2P助网络电视台一臂之力!

    网络风云的时代,网络视频一枝独秀成为人们网上娱乐的重要"休闲食品",用视觉来体验大千世界.人们已不满足于在家里受时间约束,来以传统固定单一的模式来观看电视节目,无自主选择的权利.尤 ...

  7. JavaSE教程-03深入探究原码,反码,补码-扩展

    1.原码,反码,补码的基础概念和计算方法 在搞清楚为什么计算机要使用补码之前,我们先搞清楚一个基本知识点,就是原码,反码,补码的计算方式. 对于一个数,计算机要使用一定的编码方式进行存储,原码,反码, ...

  8. 2020年江苏中考数学能用计算机吗,2020年【中考数学】真题及模拟:几何探究型问题(原卷版)(江苏专用).docx...

    中考真题·模拟引申 PAGE 1 精品资源·备战中考 『真金试炼·备战中考』『中考真题·分项详解』 『真金试炼·备战中考』 『中考真题·分项详解』 编在前面: 历年的中考卷可以让学生认识到中考的题型, ...

  9. php 双向绑定的原理,【原】数据双向绑定和虚拟dom探究

    自各个mvvm框架出现和流行以来,他们都实现了两个新的概念及功能:数据双向绑定和虚拟dom.网上对于这两个概念的阐述很多很全面,这里仅对它们的原理和应用场景进行探究和记录,希望更接地气的理解和应用这两 ...

最新文章

  1. conda install和pip install的区别
  2. 《使用CSLA 2019:CSLA .NET概述》原版和机译文档下载
  3. CODING 缺陷管理功能正式开始公测
  4. ListT 排序学习
  5. C/C++之 C++ String(字符串)
  6. JAVA SSM框架+Redis 实现单点登录
  7. Sql server之常用三表联查举例
  8. 口译分类词汇:上海景点名集锦
  9. 微信小程序-通知滚动小提示
  10. java 求集合真子集_【同步练习】高一高中数学必修1集合的关系与元素性质
  11. 48.本地Hyper-V虚拟机的异地(Azure)容灾(下)
  12. vue-cli 里axios的使用
  13. 约束理论学习随笔(1)
  14. r语言 svycoxph_R语言之生信⑦Cox比例风险模型(单因素)
  15. 1901~2100年节气表
  16. C++栈的初始化,入栈,出栈,获取栈顶元素等操作
  17. 常见文档注释工具简介
  18. 如何使用 WEB 技术编写前端代码,实现大屏展示和地图显示功能
  19. C++学习(一五零)qt的公有类、私有类、Q_Q、Q_D、二进制兼容
  20. Text 文本中点击跳转超链接

热门文章

  1. 将MATLAB中的图像信息用到Vivado中
  2. nothing to build for project 'XXX'
  3. CMFCTabCtrl 切换页面闪烁问题
  4. 2021泰州高考什么时候查成绩查询,2021年泰州学院高考录取结果什么时候出来及查询系统入口...
  5. php where 不包含,php – 除非它们包含“where”或“like”子句,否则不允许删除
  6. java 循环查询list_Java用list储存,遍历,查询指定信息过程详解
  7. 聊聊LightProbe原理实现以及对LightProbe数据的修改
  8. Java基础之GC回收
  9. SVN_06导入项目文档
  10. Laravel 5.4 migrate时报错: Specified key was too long error