999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

利用Vista和WCF開發(fā)P2P軟件

2007-01-01 00:00:00陳業(yè)綱徐則同
計算機時代 2007年5期

摘要:利用Windows Vista的增強功能并結(jié)合PNRP(對等名稱解析協(xié)議)、PNM(People Near Me)和WCF(WindowsCommunication Foundation)中引進(jìn)的PeerChannel功能,解決了傳統(tǒng)的P2P應(yīng)用程序開發(fā)中的常見問題。

關(guān)鍵詞:對等名稱解析協(xié)議;PNM;WCF;PeerChannel

0引言

從傳統(tǒng)意義來說,P2P應(yīng)用程序開發(fā)所面臨的難題包括:需要開發(fā)用于消息交換的專用協(xié)議;必須查找并連接隱藏在“網(wǎng)絡(luò)地址轉(zhuǎn)換”(NAT)或防火墻背后的應(yīng)用程序?qū)嵗恍枰С衷趶V域網(wǎng)(WAN)中定位各應(yīng)用程序所需的慣常基礎(chǔ)結(jié)構(gòu)。這些問題將隨著Windows Vista和.NET Framework的發(fā)布而得到解決。將Windows Vista的增強功能與PNRP、PNM和WCF中引進(jìn)的PeerChannel功能相結(jié)合,就能順利開發(fā)P2P應(yīng)用程序。

1 P2P基本原理:網(wǎng)格計算

網(wǎng)格計算是利用互聯(lián)網(wǎng)技術(shù),把分散在不同地理位置的計算機組成一臺虛擬超級計算機,其中每臺計算機是一個“節(jié)點”,所有計算機就組成了節(jié)點網(wǎng)——網(wǎng)格。節(jié)點加入網(wǎng)格的方式取決于所使用的網(wǎng)格技術(shù),通常,該節(jié)點必須用網(wǎng)格名來解析網(wǎng)格中已有的一個或多個節(jié)點的物理地址。在接收到網(wǎng)格中一個或多個節(jié)點的物理地址后,預(yù)期節(jié)點必須立即連接到這些地址中的一個、部分或全部地址,并應(yīng)該準(zhǔn)備好響應(yīng)后續(xù)的其他預(yù)期節(jié)點的網(wǎng)格名解析請求。網(wǎng)格名解析是一個復(fù)雜的問題。這是因為,在許多情況下,網(wǎng)格名解析要依賴于一個或更多的其他網(wǎng)格。

節(jié)點連接到網(wǎng)格,它就可以通過以下兩種方式之一與其他節(jié)點進(jìn)行通信:網(wǎng)格擴散(也稱多方消息傳送),或定向消息傳送。網(wǎng)格很少處于靜態(tài)。在多數(shù)P2P應(yīng)用程序中,由于網(wǎng)絡(luò)連接變動,或者是用戶啟動和終止應(yīng)用程序,節(jié)點可能會頻繁地加入和離開網(wǎng)格。多數(shù)網(wǎng)格都具備一些維護(hù)機制。通常而言,網(wǎng)格維護(hù)的目標(biāo)就是修復(fù)或調(diào)整網(wǎng)格以使其更高效或更穩(wěn)健地運行;各種網(wǎng)格技術(shù)實現(xiàn)網(wǎng)格維護(hù)的方式都不同。

2 PNRP(對等名稱解析協(xié)議)

PNRP完成網(wǎng)格名向物理地址的轉(zhuǎn)變。PNRP v1可供Windows XP(SPl)以上版本使用。可以說,PNRP本身就是一個采用Windows服務(wù)形式的P2P應(yīng)用程序,并且PNRP節(jié)點的網(wǎng)格專用于發(fā)現(xiàn)加入到其他網(wǎng)格中的節(jié)點的物理地址。

PNRP和1Pv6 PNRP構(gòu)建于Internet協(xié)議版本IPv6之上。PNRP功能的原型、結(jié)構(gòu)、錯誤代碼均在Windows SDK的p2p.h頭文件中定義。如果某應(yīng)用程序想要向PNRP注冊—個網(wǎng)格名,它必須用非托管代碼通過Windows API實現(xiàn),或用托管代碼通過公共語言運行庫(cLR)的P/Invoke工具實現(xiàn)。目前,在Windows API的PNRP部分的.NET Framework中未包含托管包裝。但通過使用netsh命令行實用程序能訪問PRNP。命令向PNRP注冊—個新的PNRP名可以使用以下命令:

c:\emp>netsh

netsh>p2p pnrp peer

netsh p2p pnrp peer>add 0.baogxm

Ok.

0.baogxm即是P2P名。當(dāng)此命令執(zhí)行時,PNRP會生成--5\"-PNRP ID,將該PNRP ID與P2P名相關(guān)聯(lián),并為該PNRP ID分配—個IPv6和IPv4地址。如果訪問另一臺已安裝PNRP并已啟動的計算機,則可以用以下netsh命令解析網(wǎng)格名0.baogxm:

netsh p2p pnrp peer>resolve 0.baogxm

Resolve started...

Found:Comment:gonzo//Comment字段代表注冊了0.baogxm的計算機名稱,該字段從netsh自動填充,并且不能用作解析進(jìn)程的一部分

Addresses:[0000:0000:0000:0000:0000:0000:0000:0001]:8350 udp

210.41.35.1 99:8350 tcp

3 PeerChannel

WCF為許多不同類型的分布式應(yīng)用程序提供了一個通用的編程模型。使用這個通用編程模型可以構(gòu)建P2P應(yīng)用程序。實際上,PeerChannel WCF模塊專用于構(gòu)建P2P應(yīng)用程序。

PeerChannel網(wǎng)格專為消息擴散而設(shè)計。PeerChannel網(wǎng)格的結(jié)構(gòu)由每個節(jié)點所連接的鄰居數(shù)量所控制,PeerChannel網(wǎng)格會主動維護(hù)網(wǎng)格的結(jié)構(gòu)。更具體點說,網(wǎng)格中的節(jié)點會將連接的鄰居數(shù)保持在2~7個之間,以使本地節(jié)點的資源需求與保持網(wǎng)格穩(wěn)健性之間取得平衡。假設(shè)某節(jié)點在進(jìn)入網(wǎng)格時帶有3個鄰居,隨后其中2個鄰居離開了網(wǎng)格,則該節(jié)點將開始一個維護(hù)周期以獲取新的鄰居。當(dāng)一個PeerChannel節(jié)點連有3個鄰居時,則認(rèn)為它處于理想的連接狀態(tài),但一個節(jié)點可以接受多達(dá)7個鄰居,以便低于鄰居數(shù)最低閾值的節(jié)點能迅速獲得新的鄰居。應(yīng)注意的是,應(yīng)用程序不能更改這些閾值或?qū)W(wǎng)格的維護(hù)實施任何控制,這些細(xì)節(jié)問題完全由PeerChannel基礎(chǔ)結(jié)構(gòu)逐個節(jié)點地處理。

PeerChannel提供了PNRP解析程序和自定義解析程序,用于預(yù)期節(jié)點發(fā)現(xiàn)網(wǎng)格中已有節(jié)點的地址。這兩種方法都將網(wǎng)格名傳遞給解析程序并接收網(wǎng)格中其他節(jié)點的IP地址列表。一旦解析進(jìn)程生成地址列表,預(yù)期PeerChannel節(jié)點就并發(fā)連接到每個地址。當(dāng)PeerChannel網(wǎng)格中已有的節(jié)點收到其中一個連接請求時,它可以接受或拒絕該連接。如果接受該連接,則節(jié)點會向新連接的節(jié)點發(fā)送一條包含網(wǎng)格中其他節(jié)點地址列表的歡迎消息。如果拒絕該連接,則節(jié)點會向預(yù)期節(jié)點發(fā)送一條包含拒絕理由以及網(wǎng)格中其他節(jié)點地址列表的拒絕消息。

PeerChannel向預(yù)期節(jié)點返回地址列表的方式,不限于網(wǎng)格名解析(通過PNRP解析程序或自定義解析程序執(zhí)行)。與將網(wǎng)格名解析作為預(yù)期節(jié)點獲取地址的惟一方法相比,這可使節(jié)點更快速地進(jìn)入理想的連接狀態(tài),也可使網(wǎng)格中的節(jié)點可對節(jié)點擁有的鄰居數(shù)(這一因素會進(jìn)而影響網(wǎng)格的穩(wěn)健性)進(jìn)行控制。

PeerChannel網(wǎng)格內(nèi)節(jié)點問傳送消息的重復(fù)率和網(wǎng)絡(luò)帶寬消耗較低。網(wǎng)格中的節(jié)點在網(wǎng)格內(nèi)發(fā)送消息,實際上是在向其鄰居發(fā)送消息。收到消息后,每個鄰居都會檢驗該消息,然后將其轉(zhuǎn)發(fā)給自己的鄰居。節(jié)點從某鄰居收到消息,不會將此消息轉(zhuǎn)發(fā)回該鄰居。此外,如果節(jié)點多次從某鄰居收到先前已收到并處理過的消息,則與該鄰居的連接會在下一個維護(hù)周期中終止。這些功能是通過節(jié)點上的本地高速緩存來實現(xiàn)的。PeerChannel網(wǎng)格中的每個節(jié)點都會對WS-Addressing消息ID的值和傳送消息的鄰居的標(biāo)識符進(jìn)行緩存處理,在決定向哪些鄰居傳送該消息時會檢查這個高速緩存。

PeerChannel節(jié)點還可以將消息發(fā)送給網(wǎng)格中節(jié)點的子集。這通過向消息分配一個跳躍計數(shù)實現(xiàn)。跳躍計數(shù)是模糊界定接收消息的節(jié)點數(shù)的一種方法。例如,如果一個PeerChannel節(jié)點(節(jié)點A)有3個鄰居且在跳躍計數(shù)為1的情況下向網(wǎng)格發(fā)送一個消息,則該消息將被傳送到3個節(jié)點。同樣,如果節(jié)點A的每個鄰居也都有3個鄰居且節(jié)點A在跳躍計數(shù)為2的情況下向網(wǎng)格發(fā)送一個消息,則該消息將被傳送到9個節(jié)點。但如果節(jié)點A的任一鄰居有共用的鄰居,則此數(shù)字將相應(yīng)減少。

從物理上說,跳躍計數(shù)在消息中被表示為標(biāo)頭塊中的一個整數(shù)。當(dāng)某節(jié)點收到帶有跳躍計數(shù)的消息時,它會檢查跳躍計數(shù)的值。如果該值大于零,節(jié)點會單調(diào)遞減此跳躍計數(shù),然后將帶有遞減后的跳躍計數(shù)值的消息轉(zhuǎn)發(fā)給相應(yīng)鄰居。如果節(jié)點所接收消息中包含的跳躍計數(shù)為0,則不轉(zhuǎn)發(fā)該消息。需要注意的是,跳躍計數(shù)標(biāo)頭塊被排除在消息簽名之外,因此更改這個值不會影響到應(yīng)用于消息的數(shù)字簽名的完整性,而且會避免產(chǎn)生與重復(fù)生成數(shù)字簽名并將其序列化到消息相應(yīng)部分中的相關(guān)開銷。

4 People Near Me

PNM是集成在Windows Vista之中的一種網(wǎng)格技術(shù),它允許鄰近的設(shè)備組和人員組相互發(fā)現(xiàn)、連接、邀請并進(jìn)行協(xié)作。PNM是一項完全自選的網(wǎng)格技術(shù),默認(rèn)情況下處于關(guān)閉狀態(tài)。PNM體系結(jié)構(gòu)包含了一個稱為p2phost.exe的P2P應(yīng)用程序。此程序運行時,將通過連接到其他計算機上p2phost.exe的實例來創(chuàng)建網(wǎng)格。PNM用于解析本地節(jié)點并與這些本地節(jié)點的子集進(jìn)行通信。PNM API作為Windows API的一部分,主要用于配置p2phost.exe。

5 PeerChannel實例

利用PeerChannel構(gòu)建P2P應(yīng)用程序的步驟如下:

(1)定義基本的Windows窗體樣板代碼。

(2)向窗體添加控件。

(3)定義必需的WCF服務(wù)合同。

(4)編寫連接到網(wǎng)格和從網(wǎng)格接收消息的WCF代碼。

(5)編寫向網(wǎng)格中其他節(jié)點發(fā)送消息的代碼。

對于任何WCF應(yīng)用程序,開發(fā)過程的第一步是定義服務(wù)合同。PeerChannel要使用的服務(wù)合同類似于其他WCF合同,只不過PeerChannel中所有的OperationContractAttribute都將IsOneWay實例屬性設(shè)置為true。此屬性規(guī)定消息的接收方是否應(yīng)發(fā)送回復(fù)。如果想要接收方發(fā)送回復(fù),可以將服務(wù)合同定義為雙向合同,但每個OperationContractAttribute仍必須將IsOneWay實例屬性設(shè)置為true。定義合同代碼如下:

[ServiceContract]

interface IPictureViewer{

[OpemtionContract(IsOneWay=true)]//

void SharePicture(Stream stream)://SharePicture接口方法用

OperationContractAttdbute屬性加以說明,并且IsOneWay實例屬性被設(shè)置為true。此操作將被用于向網(wǎng)格中其他節(jié)點傳送圖片的字節(jié)

}

在定義了服務(wù)合同后,需要添加WCF代碼,該代碼會將我們的應(yīng)用程序連接到PeerChannel網(wǎng)格并且被動等待來自網(wǎng)格的消息。首先,在窗體中實現(xiàn)新定義的服務(wù)合同;然后,定義類型ServiceHost的字段。所接收的消息將被發(fā)送到frmPictureViewer類型的單個實例。要顯示此功能,我們必須將正確的ServiceBehavior分配給frmPictureViewer類型。

接下來,必須對ServiceHost進(jìn)行實例化,添加端點并開始偵聽外來的消息。由于構(gòu)建的是Windows窗體應(yīng)用程序,因此實現(xiàn)此操作的邏輯位置就是窗體的構(gòu)造函數(shù)。到此,已經(jīng)完成了連接到網(wǎng)格并偵聽消息所需的所有步驟。與標(biāo)準(zhǔn)的WCF代碼相比,只在URI的方案(net.p2p)、所使用的綁定(NetPeerTcpBinding)以及所增添的基于密碼的安全性方面有所不同。

只要調(diào)用了ServiceHost.Open,我們的應(yīng)用程序就會通過PNRP來解析網(wǎng)格名(pictureView)。此時,可以通過運行netsh命令以列出注冊的對等名稱來驗證我們的PeerChannel應(yīng)用程序是否正在使用PNRP。如果PNRP可以將網(wǎng)格名解析為一個或多個IP地址,則我們的應(yīng)用程序?qū)L試連接到這些節(jié)點。如果不是這樣,則該節(jié)點將成為網(wǎng)格中的第一個節(jié)點。如前所述,現(xiàn)有節(jié)點將通過發(fā)送歡迎消息或拒絕消息來接受或拒絕連接。這種情況有可能在對ServiceHost.Open的調(diào)用返回后發(fā)生。

加載共享圖片的代碼是Windows窗體基本代碼:首先,對OpenFileDialog進(jìn)行實例化,獲得一個Stream,將該Stream轉(zhuǎn)換為Image,然后通過PictureBox.Image屬性引用Image。實際上,要將圖像加載到PictureBox中,只需調(diào)用Sharepicmm方法,將從OperlFileDialog.OpenFile返回的Stream作為參數(shù)傳遞。

要將包含圖片的消息發(fā)送到網(wǎng)格中的其他節(jié)點,需要在類型ChannelFactory和IPictureViewer的窗體中定義一些字段,然后在窗體的構(gòu)造函數(shù)中將這些變量實例化。

請注意,所使用的網(wǎng)格密碼和證書(用于創(chuàng)建消息的數(shù)字簽名)必須與設(shè)置ServiceHost時所用的相同。此外,其代碼也要與非PeerChannel WCF應(yīng)用程序中的代碼相同。

構(gòu)建了發(fā)送基礎(chǔ)結(jié)構(gòu)后,就可以使用它向網(wǎng)格中的其他節(jié)點發(fā)送消息。為此只需為共享按鈕編寫一個如下所示的事件處理程序:

private void btnShare_Click(object sender,EventArgs e)

{using(MemoryStream stream=new Memo~Stream())

{Image image=pbView.Image;

image.Save(stream,ImageFormat.Jpeg);

//將圖像存儲到stream中

stream.Position=O;//復(fù)位位置

channel.SharePicture(stream);//向網(wǎng)格發(fā)送消息

}

}

6 結(jié)束語

隨著Windows Vista和.NET Framework 3.0的發(fā)布,P2P應(yīng)用程序的開發(fā)門檻將明顯降低。我們相信,技術(shù)的進(jìn)步(如PNRP、IPv6)加上更具生產(chǎn)力的新型平臺的問世(如PeerChannel和PNM)將在P2P應(yīng)用程序開發(fā)領(lǐng)域開創(chuàng)一個新時代。最終,應(yīng)用程序?qū)⒏邊f(xié)作性,并完成我們原來只能想像的一些功能。

注:本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文。

主站蜘蛛池模板: 精品国产福利在线| AV片亚洲国产男人的天堂| 国内视频精品| 国产精品自在自线免费观看| 久久亚洲中文字幕精品一区| 三上悠亚在线精品二区| 久久精品人人做人人爽| 欧美高清三区| 国产手机在线观看| 欧洲欧美人成免费全部视频| 伊人色综合久久天天| 国产爽妇精品| 国产国语一级毛片| 波多野结衣久久高清免费| 欧美亚洲日韩不卡在线在线观看| 2019年国产精品自拍不卡| 2020久久国产综合精品swag| 婷婷六月色| 国产精品妖精视频| 青青热久麻豆精品视频在线观看| 丁香婷婷久久| 久久鸭综合久久国产| 日韩免费成人| 日本人妻丰满熟妇区| 国产精品女在线观看| 国产区免费| 在线一级毛片| 国产美女主播一级成人毛片| 亚洲动漫h| 亚洲国产精品日韩欧美一区| 久久久久免费看成人影片| 精品精品国产高清A毛片| 无码AV日韩一二三区| 久久中文无码精品| 手机成人午夜在线视频| 日本一区二区三区精品视频| 中文字幕永久视频| 久久精品无码国产一区二区三区| 国产成人精品亚洲日本对白优播| 在线国产91| 中文字幕在线一区二区在线| 狠狠做深爱婷婷久久一区| 欧美日韩综合网| 蜜臀AV在线播放| 91午夜福利在线观看| 亚洲人成网站观看在线观看| 中文字幕天无码久久精品视频免费 | 国产黄色免费看| 亚洲第一黄片大全| 国产美女免费网站| 国产真实乱了在线播放| 欧美翘臀一区二区三区| 免费人欧美成又黄又爽的视频| 一个色综合久久| 91国内在线视频| 尤物在线观看乱码| 国产亚卅精品无码| 欧美一级高清视频在线播放| 毛片网站观看| 久久国产高潮流白浆免费观看| 国产在线自乱拍播放| 国产欧美精品一区aⅴ影院| 日本草草视频在线观看| 中文字幕亚洲电影| 亚洲永久免费网站| 亚欧美国产综合| 国产无码在线调教| 国产精品第一区| 久久永久精品免费视频| 亚洲免费毛片| 亚洲人成在线精品| 亚洲人成日本在线观看| 欧美中出一区二区| 欧日韩在线不卡视频| 精品国产Av电影无码久久久| 国产女人18水真多毛片18精品| 九九九国产| 日韩人妻精品一区| 亚洲无码视频一区二区三区| 超碰aⅴ人人做人人爽欧美 | 在线高清亚洲精品二区| 全部无卡免费的毛片在线看|