1000部丰满熟女富婆视频,托着奶头喂男人吃奶,厨房挺进朋友人妻,成 人 免费 黄 色 网站无毒下载

首頁 > 文章中心 > 正文

P2P文件系統

前言:本站為你精心整理了P2P文件系統范文,希望能為你的創作提供參考價值,我們的客服老師可以幫助你提供個性化的參考范文,歡迎咨詢。

摘要:系統QtP2Pfile-sharingSystem(QPS)是利用Qt開發的P2P文件共享系統。QPS采用P2P中的混合模式,此模式結合了集中目錄式和純分布式兩者的優點,在實現上具有簡易性,在共享度上具有很強的擴展性。QPS的最大特點是加入了策略。這種策略能限制一些用戶只下載而不共享資源的行為。策略的引入是為了鼓勵用戶與其他人分享自己的資源,而不僅僅是索取。入策略的QPS不僅能比較有效的限制只下載不分享的行為,而且對系統的壽命也有相當程度的提高。

關鍵詞:文件共享;P2P;策略;Qt

C/S式架構造就了一批著名的門戶網站,如雅虎,新浪等。這些網站容易受到黑客的親睞后果是服務崩潰。C/S式架構只有一個服務器或服務機群,服務器一旦崩潰,它提供的服務也將停止。而P2P式架構卻正好相反,它沒有服務器(相對C/S架構而言)或服務器是分布的,一個服務器崩潰了,其他的服務器照樣能提供服務。這種架構能有效的抵抗DDOS攻擊,它的安全性有很可靠的保障。另外,采用P2P式架構的網絡資源共享系統不但大大的減輕了單個服務器的負擔,而且也提高了很大的安全性。人們也可以通過這種架構建立自己的信息天地,與其他的人分享自己的資源。

1系統設計實現的重點與難點

系統QPS在Linux上用Qt開發,系統設計原理和策略都并不復雜,但這不代表系統的實現也是簡單的。對于系統的整個實現來說,有三個地方是最重要的,也是比較難的。先介紹系統運行流程:

(1)Group-leaderpeer運行,并連接上其他的任意某個Group-leaderpeer;

(2)Ordinarypeer連接(登陸)某個Group-leaderpeer,并把所資源表發送個Group-leaderpeer;

(3)Group-leaderpeer將已連接的其他PC的資源表發送給此ordinarypeer;

(4)Ordinarypeer瀏覽資源并選擇下載或則向Group-leaderpeer發送資源搜索請求;

(5)Group-leaderpeer將資源表中符合搜索的資源所在ordinarypeer的IP發給請求ordinarypeer,同時向其他以連接的Group-leaderpeer發送搜索請求,其他的Group-leaderpeer將資源IP反饋,收到反饋后再發送個搜索ordinarypeer;

(6)Ordinarypeer從獲得的資源表中選擇下載,即與另一個ordinarypeer建立連接,下載完畢后斷開連接。

從上面的過程可以看出,系統共有三個通信鏈路,分別是:

(1)Group-leaderpeer與Group-leaderpeer之間的通信;

(2)ordinarypeer與Group-leaderpeer之間的通信;

(3)ordinarypeer與ordinarypeer之間的通信。

三個通信鏈路上的信息都是不一樣的。因此,必須給三個通信鏈路都制定相應的通信協議。QPS不是多線程的,因此對每個通信套接字來說,都必須知道對方的套接字。這在實現上也存在一定的難度,這個是由開發工具而帶來的。最后一個難度是NAT穿透問題。為了解決不同局域網間的通信,這個問題的解決是必須的。由于開發硬件環境的限制,現版本的QPS本沒有考慮這個問題。也就是說,實現的版本是局域網內的。在此,需要指出的是,NAT的問題并沒有違背QPS的目的。首先,QPS只是當前的一個版本,以后可能會進一步完善;再者,在將來IPv6的推出就自然而然的解決了不同局域網內通信這一問題。

2實現過程

針對上節的三個通信鏈路,必須要設計好三個通信協議。先看下QPS中需要傳輸的各種信息。如圖1:

通信鏈路上的信息表示的意義如下:

Downloadrequest:文件下載請求信息;

Filedata:文件數據;

Localsharelist:本地的共享信息列表,包括文件名,文件大小,下載次數等;

Sharelist:Group-leaderpeer上的共享信息列表;

Searchmessage:文件搜索信息,包括文件名及搜索跳數;

Searchresult:返回的搜索結果,包括文件名和文件所在IP;

Otherleadermsg:其他leaderpeer上的信息,包括連接ordinarypeer數目和文件數量等;

Localsharemsg:和otherleadermsg一樣。

(1)數據結構定義。

為了實現以上三個通信協議,首先規定了一些數據結構,以區別不同的通信信息。個種數據結構如下:

#defineFILEINFO1//文件信息

#defineSHAREINFO2//共享列表信息

#defineDOWNLOAD3//下載請求信息#defineSEARCH4//文件搜索信息

#defineLEADERINFO5//Group-leaderpeer信息

#defineFILEDATA6//文件數據

#defineMAX_SIZE(2048*10)//文件數據的大小

typedefstruct

{

inttype;//表示是何種信息,下同

ULONGsize;//文件大小

ULONGdownloadTimes;//文件下載次數

charname[100];//文件名

}FileMsg;//文件信息結構體

typedefstruct

{

inttype;

ULONGsize;//文件大小

ULONGdownloadTimes;//文件下載次數

charip[20];//文件所在IP

charname[100];//文件名

}ShareMsg;//共享信息列表結構體

typedefstruct

{

inttype;

ULONGsize;//文件大小

ULONGseek;//文件數據塊在文件中的位置

charname[100];//文件名

}DownloadMsg;//下載請求結構體

typedefstruct

{

inttype;

ULONGtips;//文件搜索跳數

charname[100];//文件名

}SearchMsg;//文件搜索結構體

typedefstruct

{

inttype;

ULONGconnectedNumber;//連接數量

ULONGfileNumber;//文件數目

charip[20];//Group-leaderpeer的IP

}LeaderMsg;//Group-leaderpeer信息結構體

typedefstruct

{

inttype;

ULONGseek;//文件數據塊在文件中的位置

ULONGbytes;//buff中的實際字節數

ULONGsize;//文件大小

charname[100];//文件名

charbuff[MAX_SIZE];//文件數據

}FileData;//文件數據結構體

(2)信息傳輸函數的聲明。

voiduploadShareList(constFileMsg&file);//uploadlocalsharelisttoleader

voiddownload(constDownloadMsg&msg);//downloadfiledata

voidsearch(QStringfileName,UINTtips);//searchafile

voiddownShareList();//downloadotherpeers''''sharelistfromleader

voidotherLeadersInfo();//getotherleaders''''infothroughtheconnectedleader

voidsearchBack();//seachresultback,readit

voiduploadFile(intsock);//uploadthefiledatathatdownloaderrequested

voidreceiveList(intsock);//receivepeer''''ssharelist

voidsendShareList(ComSocket*socket);//sendsharelisttopeer->socket

voidsendOtherLeaderInfo(ComSocket*socket);//sendotherleaders''''infotopeer

voidsendLeaderInfo(ComSocket*socket);//sendleader''''sinfotosomeleader

voidsearch(intsock);//receivedsearchrequestfrompeer

voidremoteSearch(SearchMsgmsg);//sendsearchtologonedleader

voidleaderSearch(intsock);//receivedleader''''ssearchrequest

voidsearchBack();//receivedsearchresultfromleader

以上函數是根據上面的數據結構而聲明的。每個函數都有一個對應的數據結構。這些函數是整個系統的核心。

設計了解決通信問題的數據結構和函數的聲明后,剩下需要做的便是具體編碼,將聲明的函數加以實現,最后測試其是否正確便真正意義上的解決了上面敘述的難點問題,也是核心問題。

(3)用戶接口。

QPS只給用戶提供了簡單的操作接口,但我相信這是足夠的。具體的用戶接口如下:

連接選擇:讓用戶選擇想要連接的Group-leaderpeer。

上傳數目設置:為了限制上傳量,保障用戶的系統資源(CPU,網絡帶寬等)。

搜索設置:讓用戶輸入文件名及搜索跳數。

下載選擇:雙擊文件名即可下載該文件。共享目錄設置:讓用戶選擇想要共享的目錄

下載目錄設置:讓用戶選擇下載文件放置的路徑

除了上述用戶可以直接操作的接口外,還有些接口是用戶不可操作的。這些接口是用來顯示當前系統的運行情況。比如,下載顯示用來顯示當前正在下載的文件,包括下載速率,已下載文件的大小等;而下載完成列表顯示的則是系統自啟動以來下載的所有文件列表。對于許多的其他文件共享系統來說,它們都有豐富的接口,盡可能的讓用戶使用更簡便。QPS的設計和實現的主要目的是在原理和策略上挖掘網絡資源,使得網絡資源能夠盡可能的廣泛共享。因此,在界面上只做了基本的接口。

(4)配置文件。

為方便用戶的各項設置,QPS中也有許多的配置文件。這些配置文件在系統運行時會被自動的讀取,相應的變量會被賦值。用戶改變某個設置后,這項設置同樣會被寫入到配置文件中,并在下次運行時被讀取。這類配置文件典型的是下載目錄和共享目錄的設置。系統運行時,會找到當前共享目錄路徑,并獲取該目錄下文件信息。還有一類配置文件是可作為用戶輸入的文本文件。比如leaders.dat這個文件就是用來讓用戶輸入可以選擇連接的Group-leaderpeerIP的。記錄文件被下載次數的配置文件對用戶來說是不可更改的,這是為了防止用戶惡意修改此文件以獲得totalValue,達到少共享文件就可以下載大量文件的目的。

文件共享系統QPS是在上面敘述的四點上一步一步加以實現的,其中也有考慮不全的地方,反反復復經過了幾次修改。在提供基本功能上,工作重點都放在協議的實現上。由于Qt開發平臺沒有對網絡程序提供豐富的接口,許多的接口不得不自己一步一步實現并測試正確性。在這點上,對QPS的實現確實用相當大的影響。當然,這帶來的好處是二次開發比較簡便,因為上層的接口都是已經實現了的,正確性很高。

參考文獻

[1]陸正中,馬進德,石正貴等.JBuilder9軟件開發項目實踐[M].北京:清華大學出版社,2005:240-261.[2]JamesF.Kurose,KeithW.Ross。計算機網絡——自頂向下方法與Internet特色[M].北京:高等教育出版社,2005:136-145.

[3]RobertFlenner等,JavaP2P技術內幕[M].北京:電子工業出版社,2003:200-235.

[4]許斌.JXTA——JavaP2P網絡編程技術[M].北京:清華大學出版社,2003:1-256.

[5]Oaks,Traversat,Gong.JXTA技術手冊[M].北京:清華大學出版社,2004:23-78.

文檔上傳者
主站蜘蛛池模板: 驻马店市| 阳新县| 余江县| 高淳县| 军事| 敦煌市| 甘孜| 交城县| 怀仁县| 湖北省| 凤山县| 山阳县| 玉山县| 南郑县| 阳高县| 福安市| 嘉定区| 益阳市| 德昌县| 水富县| 祁连县| 怀安县| 林周县| 都匀市| 南城县| 黔东| 洛宁县| 平舆县| 秦皇岛市| 保山市| 海林市| 闸北区| 深水埗区| 潞城市| 谷城县| 台中市| 平湖市| 宜兰县| 武川县| 柏乡县| 郎溪县|