日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【原】P2P应用的探究

發布時間:2023/12/13 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【原】P2P应用的探究 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ?什么是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应用的探究的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。