.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 所示。
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 所示。
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#
日历
最新文章
随机文章
热门文章
分类
存档
- 2025年11月(1)
- 2025年9月(3)
- 2025年7月(4)
- 2025年6月(5)
- 2025年5月(1)
- 2025年4月(5)
- 2025年3月(4)
- 2025年2月(3)
- 2025年1月(1)
- 2024年12月(5)
- 2024年11月(5)
- 2024年10月(5)
- 2024年9月(3)
- 2024年8月(3)
- 2024年7月(11)
- 2024年6月(3)
- 2024年5月(9)
- 2024年4月(10)
- 2024年3月(11)
- 2024年2月(24)
- 2024年1月(12)
- 2023年12月(3)
- 2023年11月(9)
- 2023年10月(7)
- 2023年9月(2)
- 2023年8月(7)
- 2023年7月(9)
- 2023年6月(6)
- 2023年5月(7)
- 2023年4月(11)
- 2023年3月(6)
- 2023年2月(11)
- 2023年1月(8)
- 2022年12月(2)
- 2022年11月(4)
- 2022年10月(10)
- 2022年9月(2)
- 2022年8月(13)
- 2022年7月(7)
- 2022年6月(11)
- 2022年5月(18)
- 2022年4月(29)
- 2022年3月(5)
- 2022年2月(6)
- 2022年1月(8)
- 2021年12月(5)
- 2021年11月(3)
- 2021年10月(4)
- 2021年9月(9)
- 2021年8月(14)
- 2021年7月(8)
- 2021年6月(5)
- 2021年5月(2)
- 2021年4月(3)
- 2021年3月(7)
- 2021年2月(2)
- 2021年1月(8)
- 2020年12月(7)
- 2020年11月(2)
- 2020年10月(6)
- 2020年9月(9)
- 2020年8月(10)
- 2020年7月(9)
- 2020年6月(18)
- 2020年5月(4)
- 2020年4月(25)
- 2020年3月(38)
- 2020年1月(21)
- 2019年12月(13)
- 2019年11月(29)
- 2019年10月(44)
- 2019年9月(17)
- 2019年8月(18)
- 2019年7月(25)
- 2019年6月(25)
- 2019年5月(17)
- 2019年4月(10)
- 2019年3月(36)
- 2019年2月(35)
- 2019年1月(28)
- 2018年12月(30)
- 2018年11月(22)
- 2018年10月(4)
- 2018年9月(7)
- 2018年8月(13)
- 2018年7月(13)
- 2018年6月(6)
- 2018年5月(5)
- 2018年4月(13)
- 2018年3月(5)
- 2018年2月(3)
- 2018年1月(8)
- 2017年12月(35)
- 2017年11月(17)
- 2017年10月(16)
- 2017年9月(17)
- 2017年8月(20)
- 2017年7月(34)
- 2017年6月(17)
- 2017年5月(15)
- 2017年4月(32)
- 2017年3月(8)
- 2017年2月(2)
- 2017年1月(5)
- 2016年12月(14)
- 2016年11月(26)
- 2016年10月(12)
- 2016年9月(25)
- 2016年8月(32)
- 2016年7月(14)
- 2016年6月(21)
- 2016年5月(17)
- 2016年4月(13)
- 2016年3月(8)
- 2016年2月(8)
- 2016年1月(18)
- 2015年12月(13)
- 2015年11月(15)
- 2015年10月(12)
- 2015年9月(18)
- 2015年8月(21)
- 2015年7月(35)
- 2015年6月(13)
- 2015年5月(9)
- 2015年4月(4)
- 2015年3月(5)
- 2015年2月(4)
- 2015年1月(13)
- 2014年12月(7)
- 2014年11月(5)
- 2014年10月(4)
- 2014年9月(8)
- 2014年8月(16)
- 2014年7月(26)
- 2014年6月(22)
- 2014年5月(28)
- 2014年4月(15)
友情链接
- Unity官网
- Unity圣典
- Unity在线手册
- Unity中文手册(圣典)
- Unity官方中文论坛
- Unity游戏蛮牛用户文档
- Unity下载存档
- Unity引擎源码下载
- Unity服务
- Unity Ads
- wiki.unity3d
- Visual Studio Code官网
- SenseAR开发文档
- MSDN
- C# 参考
- C# 编程指南
- .NET Framework类库
- .NET 文档
- .NET 开发
- WPF官方文档
- uLua
- xLua
- SharpZipLib
- Protobuf-net
- Protobuf.js
- OpenSSL
- OPEN CASCADE
- JSON
- MessagePack
- C在线工具
- 游戏蛮牛
- GreenVPN
- 聚合数据
- 热云
- 融云
- 腾讯云
- 腾讯开放平台
- 腾讯游戏服务
- 腾讯游戏开发者平台
- 腾讯课堂
- 微信开放平台
- 腾讯实时音视频
- 腾讯即时通信IM
- 微信公众平台技术文档
- 白鹭引擎官网
- 白鹭引擎开放平台
- 白鹭引擎开发文档
- FairyGUI编辑器
- PureMVC-TypeScript
- 讯飞开放平台
- 亲加通讯云
- Cygwin
- Mono开发者联盟
- Scut游戏服务器引擎
- KBEngine游戏服务器引擎
- Photon游戏服务器引擎
- 码云
- SharpSvn
- 腾讯bugly
- 4399原创平台
- 开源中国
- Firebase
- Firebase-Admob-Unity
- google-services-unity
- Firebase SDK for Unity
- Google-Firebase-SDK
- AppsFlyer SDK
- android-repository
- CQASO
- Facebook开发者平台
- gradle下载
- GradleBuildTool下载
- Android Developers
- Google中国开发者
- AndroidDevTools
- Android社区
- Android开发工具
- Google Play Games Services
- Google商店
- Google APIs for Android
- 金钱豹VPN
- TouchSense SDK
- MakeHuman
- Online RSA Key Converter
- Windows UWP应用
- Visual Studio For Unity
- Open CASCADE Technology
- 慕课网
- 阿里云服务器ECS
- 在线免费文字转语音系统
- AI Studio
- 网云穿
- 百度网盘开放平台
- 迅捷画图
- 菜鸟工具
- [CSDN] 程序员研修院
- 华为人脸识别
- 百度AR导航导览SDK
- 海康威视官网
- 海康开放平台
- 海康SDK下载
- git download
- Open CASCADE
- CascadeStudio
交流QQ群
-
Flash游戏设计: 86184192
Unity游戏设计: 171855449
游戏设计订阅号








