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

P2P文件共享系統的實現分析

2008-12-31 00:00:00葉曉瓊
現代商貿工業 2008年10期

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

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

中圖分類號:TP文獻標識碼:A文章編號:1672-3198(2008)10-0355-02

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

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

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

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

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

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

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

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

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

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

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

(2)ordinary peer與Group-leader peer之間的通信;

(3)ordinary peer與ordinary peer之間的通信。

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

2 實現過程

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

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

Download request:文件下載請求信息;

File data:文件數據;

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

Share list:Group-leader peer上的共享信息列表;

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

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

Other leader msg:其他leader peer上的信息,包括連接ordinary peer數目和文件數量等;

Local share msg:和other leader msg一樣。

(1) 數據結構定義。

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

#define FILEINFO 1//文件信息

#define SHAREINFO 2//共享列表信息

#define DOWNLOAD3//下載請求信息

#define SEARCH4//文件搜索信息

#define LEADERINFO 5//Group-leader peer信息

#define FILEDATA6//文件數據

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

typedef struct

{

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

ULONG size; //文件大小

ULONG downloadTimes; //文件下載次數

char name[100]; //文件名

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

typedef struct

{

int type;

ULONG size;//文件大小

ULONG downloadTimes;//文件下載次數

char ip[20];//文件所在IP

char name[100];//文件名

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

typedef struct

{

int type;

ULONG size; //文件大小

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

char name[100];//文件名

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

typedef struct

{

int type;

ULONG tips; //文件搜索跳數

char name[100]; //文件名

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

typedef struct

{

int type;

ULONG connectedNumber;//連接數量

ULONG fileNumber; //文件數目

char ip[20];//Group-leader peer的IP

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

typedef struct

{

int type;

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

ULONG bytes; //buff中的實際字節數

ULONG size; //文件大小

char name[100];//文件名

char buff[MAX_SIZE];//文件數據

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

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

void uploadShareList(const FileMsg file);//upload local share list to leader

void download(const DownloadMsg msg);//download file data

void search(QString fileName, UINT tips);//search a file

void downShareList();//download other peers' share list from leader

void otherLeadersInfo();//get other leaders' info through the connected leader

void searchBack();//seach result back, read it

void uploadFile(int sock);//upload the file data that downloader requested

void receiveList(int sock);//receive peer's share list

void sendShareList(ComSocket* socket); //send share list to peer -> socket

void sendOtherLeaderInfo(ComSocket* socket);//send other leaders' info to peer

void sendLeaderInfo(ComSocket* socket);//send leader's info to some leader

void search(int sock);//received search request from peer

void remoteSearch(SearchMsg msg);//send search to logoned leader

void leaderSearch(int sock);//received leader's search request

void searchBack();// received search result from leader

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

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

(3)用戶接口。

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

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

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

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

下載選擇:雙擊文件名即可下載該文件。

共享目錄設置:讓用戶選擇想要共享的目錄

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

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

(4)配置文件。

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

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

參考文獻

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

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

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

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

主站蜘蛛池模板: 久久精品午夜视频| 天堂中文在线资源| 精品国产三级在线观看| 欧美国产综合视频| 精品国产欧美精品v| 久久综合国产乱子免费| 亚洲无线一二三四区男男| 亚洲永久免费网站| 国产xx在线观看| 香蕉eeww99国产在线观看| 精品人妻无码区在线视频| 成人国产三级在线播放| 久久semm亚洲国产| 中国毛片网| 国产黄网站在线观看| 幺女国产一级毛片| 亚洲欧美日韩中文字幕在线一区| 国产亚洲精品资源在线26u| 激情乱人伦| 一级一级特黄女人精品毛片| 亚洲天堂在线视频| 无码AV高清毛片中国一级毛片| 久久精品人人做人人综合试看| 亚洲精品国产首次亮相| 欧美成人午夜影院| 亚洲一区二区无码视频| 国产在线专区| 午夜激情婷婷| 亚洲天堂网站在线| 免费a级毛片视频| 欧美日韩精品综合在线一区| 久久久久久久97| 久无码久无码av无码| 亚洲精选无码久久久| 亚洲精品老司机| 99这里只有精品6| 久久夜色精品| aaa国产一级毛片| 国产精品视频观看裸模| www.av男人.com| 国产视频入口| 日本在线亚洲| 国产香蕉国产精品偷在线观看 | 午夜欧美理论2019理论| 午夜性刺激在线观看免费| 东京热av无码电影一区二区| 亚洲成人网在线播放| 高清视频一区| 国产精品亚洲天堂| 久久人人爽人人爽人人片aV东京热 | 欧美亚洲国产日韩电影在线| 人妻21p大胆| 亚洲性日韩精品一区二区| 国产99免费视频| 成人毛片免费在线观看| 91热爆在线| 日韩高清无码免费| 国产久草视频| 青草视频久久| 亚洲精品成人福利在线电影| 久久夜夜视频| 99国产精品国产高清一区二区| 欧美精品影院| 国产成人av大片在线播放| 91色老久久精品偷偷蜜臀| 亚洲欧美另类视频| 91精品在线视频观看| av免费在线观看美女叉开腿| 久久精品午夜视频| 国产成人精品三级| 欧美翘臀一区二区三区| 精品国产免费观看一区| 久久精品国产免费观看频道| 欧美日韩亚洲综合在线观看| 尤物在线观看乱码| 91久久夜色精品国产网站| 欧美日韩激情| 国产精品自拍合集| 欧美日韩国产在线播放| 操美女免费网站| 91亚洲精品第一| 中文毛片无遮挡播放免费|