首頁 > 文章中心 > 正文

      P2P文件系統(tǒng)

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

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

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

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

      1系統(tǒng)設計實現(xiàn)的重點與難點

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

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

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

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

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

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

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

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

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

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

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

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

      2實現(xiàn)過程

      針對上節(jié)的三個通信鏈路,必須要設計好三個通信協(xié)議。先看下QPS中需要傳輸?shù)母鞣N信息。如圖1:

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

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

      Filedata:文件數(shù)據(jù);

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

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

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

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

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

      Localsharemsg:和otherleadermsg一樣。

      (1)數(shù)據(jù)結構定義。

      為了實現(xiàn)以上三個通信協(xié)議,首先規(guī)定了一些數(shù)據(jù)結構,以區(qū)別不同的通信信息。個種數(shù)據(jù)結構如下:

      #defineFILEINFO1//文件信息

      #defineSHAREINFO2//共享列表信息

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

      #defineLEADERINFO5//Group-leaderpeer信息

      #defineFILEDATA6//文件數(shù)據(jù)

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

      typedefstruct

      {

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

      ULONGsize;//文件大小

      ULONGdownloadTimes;//文件下載次數(shù)

      charname[100];//文件名

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

      typedefstruct

      {

      inttype;

      ULONGsize;//文件大小

      ULONGdownloadTimes;//文件下載次數(shù)

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

      charname[100];//文件名

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

      typedefstruct

      {

      inttype;

      ULONGsize;//文件大小

      ULONGseek;//文件數(shù)據(jù)塊在文件中的位置

      charname[100];//文件名

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

      typedefstruct

      {

      inttype;

      ULONGtips;//文件搜索跳數(shù)

      charname[100];//文件名

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

      typedefstruct

      {

      inttype;

      ULONGconnectedNumber;//連接數(shù)量

      ULONGfileNumber;//文件數(shù)目

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

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

      typedefstruct

      {

      inttype;

      ULONGseek;//文件數(shù)據(jù)塊在文件中的位置

      ULONGbytes;//buff中的實際字節(jié)數(shù)

      ULONGsize;//文件大小

      charname[100];//文件名

      charbuff[MAX_SIZE];//文件數(shù)據(jù)

      }FileData;//文件數(shù)據(jù)結構體

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

      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

      以上函數(shù)是根據(jù)上面的數(shù)據(jù)結構而聲明的。每個函數(shù)都有一個對應的數(shù)據(jù)結構。這些函數(shù)是整個系統(tǒng)的核心。

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

      (3)用戶接口。

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

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

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

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

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

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

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

      (4)配置文件。

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

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

      參考文獻

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

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

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

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

      文檔上傳者
      国产精品亚洲精品日韩电影| 自怕偷自怕亚洲精品| 久久久久无码精品亚洲日韩| 伊人婷婷综合缴情亚洲五月| 亚洲午夜AV无码专区在线播放| 国产精品亚洲va在线观看| 国产精品亚洲av色欲三区| 亚洲爆乳成av人在线视菜奈实| 亚洲AV无码AV男人的天堂不卡| 亚洲av无码专区青青草原| 色综合久久精品亚洲国产| 亚洲另类自拍丝袜第五页| 亚洲精品精华液一区二区| 亚洲AV无码一区二区大桥未久| 亚洲精品蜜夜内射| 欧美亚洲国产SUV| 国产AV无码专区亚洲AV琪琪| 亚洲精品线路一在线观看| 亚洲视频在线一区二区| 国外亚洲成AV人片在线观看| 亚洲无人区午夜福利码高清完整版| 亚洲一区二区三区AV无码| 国产V亚洲V天堂无码久久久| 亚洲AV日韩精品久久久久久久| 亚洲综合自拍成人| 亚洲人成人77777网站不卡| 亚洲卡一卡二卡乱码新区| 亚洲成a∧人片在线观看无码| 免费在线观看亚洲| 亚洲天堂在线视频| 亚洲成Av人片乱码色午夜| 亚洲最新永久在线观看| 亚洲国产精品yw在线观看| 亚洲真人无码永久在线观看| 亚洲AV色欲色欲WWW| 国产国拍亚洲精品福利 | 国产中文在线亚洲精品官网| 国产亚洲免费的视频看| 91亚洲国产在人线播放午夜| 亚洲av无码久久忘忧草| 亚洲AV日韩AV永久无码色欲|