.NET下的P2P程序开发

作者:追风剑情 发布于:2025-9-4 13:03 分类:C#

P2P主要的应用

  • 文件共享(即,资源下载服务)
  • 即时通信
  • 多媒体传输(即,流媒体播放)

1、对等名称解析协议

对等名称解析协议(Peer Name Resolution Protocol, PNRP),完成对等名称的注册和解析。

1)对等节点名称和 PNRP ID

要实现 P2P 网络内的资源发现,必须能够准确地区分各个不同的资源,在 PRNP 协议中,将每个网络资源抽象为对等节点,并给每个对等节点取个名字,即对等节点名称。该名称由用户自定义的用于标识对等节点的字符串组成。

对等节点名称简称对等名,有安全的和不安全的两种形式。

对等名的格式为 Authority.Classifier。即每个对等名字符串都有一个 Authority 节,后面跟一个点号,然后是一个 Classifier 节。

Authrity 的值取决于该名称的安全类型。对于不安全的名称,Authority 为单字符 “0” 而对于安全的名称,Authority 由 40 个十六进制字符构成。

Classifier 节用于用户自定义的标志对等节点的字符串,最大长度可以是 150 个 Unicode 字符。

为了解析方便,当向群中注册 P2P 对等名时,PNRP 根据对等名生成长度为 256 位的数字,即 PNRP ID。PNRP ID 由 P2P ID 和服务器地址信息两部分构成,格式规定如图 5-4 所示。

11111.png

P2P ID:转换自对等名的 128 位数字标识符。

位置服务:由于任何节点都可以注册一个名称相同的不安全名称,因此 PNRP 规定每个 PNRP ID 中都生成一个由128位数字来区分相同群中相同 P2P ID 的不同实例。

2)云(Cloud)

安装了相同 P2P 软件的计算机必须加人一个共同的 P2P 网络中,才能相互识别各自拥有的资源并顺利进行 P2P 通信。PNRP 协议将这个 P2P 网络称为“云”。云是指一组可以通过 P2P 网络相互识别的对等节点及其上资源的集合。

PNRP 目前使用两种云:连接一本地云和全局云。全局云基于 IPv6 协议,并不支持 IPv4,整个 IPv6 互联网仅有一个全局云,代表 IPv6 互联网上的所有对等节点及其资源。

云有常见的 4 种状态。

(1)活动状态:当云处于活动状态时,对等节点处于连接状态并且有其他对等节点注册到该云中。如果云处于活动状态,则可以随时注册和解析名称。

(2)单独状态:当云处于单独状态时,云中除了自身之外没有其他 PNRP 对等节点。如果链接一本地云中仅有自身一个对等节点,则云处于单独状态。如果全局云处于单独状态,则表示没有连接上种子服务器,这时需要检查是否有防火墙阻止了上行请求数据包。

(3)虚拟状态:如果云创建之后,长时间没有使用或者从未使用,则云将从活动或单独状态转为虚拟状态。

(4)正在同步:当准备启动但是尚未启动成功时,云会暂时处于正在同步状态。这种状态属于暂态。

2、名称注册

任何资源若要被网络上的其他主机识别到,首先必须注册到 P2P 网络。名称注册就是将包含对等节点信息的对等名发布到云中,以便其他对等节点解析。

3、名称解析

名称解析是指利用对等名称获取注册到云中的资源所在对等节点的 IP 地址和端口号。

4、PNRP 名称解析的基本过程

PNRP 中没有使用索引服务器,为了完成解析,云中的每个对等节点都存储一些 PNRP ID 的缓存条目。PNRP 缓存中的每个条目都含有 PNRP ID 及应用程序的 IP 地址和端口号。名称解析时,首先在本地计算机对等节点的缓存中查找目标节点,如果没有则在缓存中的邻近节点查找,依此类推,直到找到目标节点。PNRP 名称解析过程如图 5-5 所示。

2222.png

PeerToPeer 命名空间

System.Net.PeerToPeer 命名空间中提供了支持 PNRP 的基本类,通过这些类,编程人员可以方便地实现对等名称的注册,还可以将对等名称解析为IP地址和端口号。.NET Framework 3.5 中还增加了能够方便实现 PNRP 的类,所以要确保使用 3.5 及其以上版本。表 5-1 列出了 System.Net.PeerToPeer 命名空间中的常用类。

System.Net.PeerToPeer 命名空间中的常用类
类名 说明
Peer 类 表示远程对等节点
Cloud 类 用来定义云对象的值,利用该类可以查看本机参与的所有云信息
PeerName 类 指定用来定义对等节点的相关值
PeerNameRecord 类 PeerNameRecord 包含在解析过程查询的 Cloud 或多个云中注册的 PeerName 的所有信息
PeerNameRecordCollaboration 类 表示 PeerNameRecord 元素的容器
PeerNameRegisteration 类 在一个 Cloud 或一组云中注册 PeerName
PeerNameResolver 类 指定使用 PNRP 命名空间提供的 API 将 PeerName 解析为 PeerNameRecord 的值

Cloud 类的部分方法及属性
名称 说明
Global 属性 静态属性,获取一个Cloud实例,其中包含全局(Internet)范围的对等节点
Name 属性 获取对等 Cloud 的名称
Scope 属性 获取对等 Cloud 的网络范围
ScopeId 属性 获取此对等 Cloud 的特定 IP 地址的标识符
Available 字段 返回对 Cloud (表示客户端当前参与的所有可用的云)的静态引用
AllLinkLocal 字段 返回对 Cloud (表示对等节点当前参与的所有链接--本地云)的引用
GetAvailableClouds 方法 获取调用对等节点已知的对等云的集合

PeerName 类的常用方法及属性
名称 说明
PeerName(String) 使用提供的完全限定对等名称 String 值初始化 PeerName 类型的新对象
PeerName(String, PeerNameType) 初始化 PeerName 类的新实例
Authority 返回一个字符串,该字符串指定此 PeerName 对象使用的 Authority
Classifier 返回一个字符串,其中包含对等 PeerName 的分类器
lsSecured 获取一个布尔值,该值指定这是否为一个安全的对等名称
PeerHostName 获取对等主机的名称。这是 DNS 编码版本的 PeerName,它相当于 PeerHostName,因为它们都是标识符。二者之间的不同之处在于可视化表示形式

PeerNameRegisteration 类的常用属性和方法
名称 说明
Cloud 属性 获取或设置要在其中注册 PeerName 对象的 Cloud 信息
Comment 属性 获取或设置将要在 Cloud 中注册的 PeerName 对象的其他信息
Data 属性 获取或设置 PeerNameRegistration 对象的应用程序定义的二进制数据
EndPointCollection 属性 获取为其注册关联对等名称的网络终结点的集合
PeerName 属性 获取或设置要向对等群注册的对等名称
Port 属性 获取或设置正在 PeerNameRegistration 对象中注册的对等节点使用的 TCP/IP 端口号
UseAutoEndPointSelection 属性 获取或设置一个值,该值指定当遍历对等网络或 Cloud 时是否使用自动终结点选择
Start 方法 启动注册
Stop 方法 停止注册

PeerNameRecord 类的部分常用属性
名称 说明
Comment 属性 获取或设置有关 PeerNameRecord 对象的其他信息
Data 属性 获取或设置 PeerNameRecord 对象的应用程序的二进制数据
EndPointCollection 属性 获取 PeerEndPointCollection 对象,该对象包含可供与此 PeerNameRecord 对象关联的对等节点使用的所有终结点
PeerName 属性 获取或设置此 PeerNameRecord 对象中的 PeerName。对等名称是用于标识对等资源的字符串

PeerNameResolver 类

PeerNameResolver 类提供了将 PeerName 解析成一组 PeerNameRecord 对象的方法,还提供了同步及基于事件的异步解析方法。

调用 PeerNameResover 对象的同步 Resolve 方法将返回包含端点信息的 PeerNameResover 集合对象。方法原型如下:

PublicPeerNameResoverCollection Resolve(PeerName peerName)

其中,参数 peerName 为待解析的 PeerName 对象,返回值为 PeerNameRecord 集合。

标签: C#

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号