專利名稱:一種點(diǎn)對點(diǎn)下載的方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通信技術(shù)領(lǐng)域,特別是涉及一種點(diǎn)對點(diǎn)下載的方法及裝置。
背景技術(shù):
隨著通信技術(shù)的不斷發(fā)展,通信領(lǐng)域中對于資源共享的要求越來越 高,在網(wǎng)絡(luò)互聯(lián)中,接入網(wǎng)絡(luò)的計(jì)算機(jī)都可以從其他計(jì)算機(jī)中下載需要 的資源,其中,在網(wǎng)絡(luò)中普遍存在的下載方法一般是基于客戶端-服務(wù)器(Client/Server, C/S)模式的,C/S模式是一種軟件系統(tǒng)體系結(jié)構(gòu),通過 C/S模式可以充分利用硬件環(huán)境的優(yōu)勢,將任務(wù)合理分配到Client端和 Server端來實(shí)現(xiàn),降低了系統(tǒng)的通訊開銷。目前大多數(shù)應(yīng)用軟件系統(tǒng)都是 C/S形式的兩層結(jié)構(gòu),所述服務(wù)器為在網(wǎng)絡(luò)環(huán)境下運(yùn)行相應(yīng)的應(yīng)用軟件, 為網(wǎng)上用戶提供共享信息資源和各種服務(wù)的計(jì)算機(jī),通常采用高性能的 個(gè)人計(jì)算機(jī)(Personal Computer, PC)、工作站或小型機(jī),并可以采用大 型數(shù)據(jù)庫系統(tǒng),如ORACLE、 SYBASE、 InfORMix或SQL Server,而客戶 端則相應(yīng)地需要安裝專用的客戶端軟件。服務(wù)器一般都可以給用戶提供不同需求的下載文件,現(xiàn)在技術(shù)中有 一種基于客戶端-服務(wù)器模式的下載方法,其中,每個(gè)客戶端都可以從服 務(wù)器獲取文件的下載,當(dāng)客戶端需要更新文件時(shí),就會向遠(yuǎn)程服務(wù)器發(fā) 送下載請求,當(dāng)服務(wù)器接收到所述下載請求后,會根據(jù)下載請求的內(nèi)容, 查詢存儲的相應(yīng)文件信息,若能夠查詢到所述客戶端需要更新的文件信 息時(shí),便將查詢到的文件實(shí)時(shí)返回至客戶端,這樣就實(shí)現(xiàn)了客戶端從服 務(wù)器下載文件的過程。但是,這種方法也存在缺點(diǎn),可以看出,下載文件的速度一般是根 據(jù)網(wǎng)絡(luò)情況實(shí)時(shí)改變的,如果客戶端與服務(wù)器不在一個(gè)局域網(wǎng)內(nèi),特別 是當(dāng)許多客戶端同時(shí)下載大文件時(shí),客戶端的下載速度受到很大的限制,使得很多客戶端的下載速度都及其緩慢,進(jìn)一步的,如果服務(wù)器沒 有客戶端所需的文件,那么客戶端就不能再下載文件,服務(wù)器需要保證 二十四時(shí)都能運(yùn)行,以提供文件給需要的客戶端下載,這種運(yùn)行方式給 服務(wù)器造成了很大的負(fù)荷,使得服務(wù)器的性能較差,再者,網(wǎng)絡(luò)管理工 作人員既要對服務(wù)器維護(hù)管理,又要對客戶端維護(hù)和管理,需要的維護(hù) 成本4艮高o總之,目前需要本領(lǐng)域技術(shù)人員迫切解決的一個(gè)技術(shù)問題就是如 何能夠提出一種點(diǎn)對點(diǎn)下載的方法,用以解決在客戶端的下載過程中需 要從遠(yuǎn)程服務(wù)器下載文件使得下載速度較慢的問題。發(fā)明內(nèi)容本發(fā)明所要解決的技術(shù)問題是提供一種點(diǎn)對點(diǎn)下載的方法,用以解 決在從遠(yuǎn)程服務(wù)器下載文件的過程中下載速度較慢的問題,進(jìn)一步的, 還可以減輕服務(wù)器的負(fù)荷,提升服務(wù)器的性能。本發(fā)明的另一個(gè)目的是將上述構(gòu)思應(yīng)用于具體的應(yīng)用環(huán)境中,提供 一種點(diǎn)對點(diǎn)下載的裝置,從而保證該方法的實(shí)現(xiàn)和應(yīng)用。為解決上述技術(shù)問題,本發(fā)明實(shí)施例提供了一種點(diǎn)對點(diǎn)下載的方 法,包括第一客戶端向第一代理服務(wù)器發(fā)送文件下載的請求參數(shù),所述請求 參數(shù)包括需要下載的文件信息;根據(jù)所述請求參數(shù),所述第一代理服務(wù)器向所述第一客戶端所處的 局域網(wǎng)內(nèi)的其他客戶端發(fā)送用戶數(shù)據(jù)包協(xié)議UDP消息,所述UDP消息 包括所述請求參數(shù);所述第 一代理服務(wù)器接收到所述局域網(wǎng)內(nèi)的第二客戶端的反饋消 息之后,將所述請求參數(shù)轉(zhuǎn)發(fā)至所述第二客戶端的第二代理服務(wù)器;所述第二代理服務(wù)器根據(jù)所述請求參數(shù)查找相應(yīng)的存儲文件,并將 所述存儲文件返回至第一代理服務(wù)器;所述第一客戶端保存所述存儲文件。優(yōu)選的,還可以包括啟動(dòng)所述第一客戶端所在局域網(wǎng)的所有客戶端的代理服務(wù)器。 優(yōu)選的,所述啟動(dòng)所述第一客戶端所在局域網(wǎng)的所有的客戶端的代理服務(wù)器的步驟包括當(dāng)操作系統(tǒng)開始運(yùn)行時(shí),啟動(dòng)所述第 一客戶端所在局域網(wǎng)的所有客 戶端的代理服務(wù)器。優(yōu)選的,所述啟動(dòng)所述第 一客戶端所在局域網(wǎng)的所有的客戶端的代 理服務(wù)器的步驟包括所述第 一客戶端所在局域網(wǎng)的所有更新組件啟動(dòng)所述局域網(wǎng)的所 有代理服務(wù)器。優(yōu)選的,其特征在于,所述文件信息包括所述需要下載的文件名稱 和第一 MD5值。優(yōu)選的,所述第一客戶端保存所述存儲文件的步驟之后,還包括 生成所述存儲文件的第二 MD5值。 優(yōu)選的,還包括比較所述第一MD5值和第二MD5值,若兩個(gè)值相同,則所述存儲文 件與所述第一客戶端需要下載的文件為同一文件,若兩個(gè)值不同,則所述 存儲文件與所述第一客戶端需要下載的文件為不同的文件。 本發(fā)明實(shí)施例還提供了 一種點(diǎn)對點(diǎn)下載的系統(tǒng),包括 第 一客戶端,所述第 一客戶端包括發(fā)送請求參數(shù)模塊和保存文件模塊,所述發(fā)送請求參數(shù)模塊用于向已經(jīng)啟動(dòng)的第一代理服務(wù)器發(fā)送文件 下載的請求參數(shù),所述請求參數(shù)包括需要下載的文件信息;所述保存文 件模塊用于保存從第二客戶端下載的存儲文件;第一代理服務(wù)器,所述第一代理服務(wù)器包括發(fā)送廣播消息模塊、接 收反饋消息模塊和轉(zhuǎn)發(fā)請求參數(shù)模塊,所述發(fā)送廣播消息模塊用于根據(jù) 所述請求參數(shù),向所述第一客戶端所處的局域網(wǎng)內(nèi)的其他客戶端發(fā)送 UDP消息,所述UDP廣播消息包括所述請求參數(shù);所述接收反饋消息 模塊用于接收所述局域網(wǎng)內(nèi)的第二客戶端的反饋消息;所述轉(zhuǎn)發(fā)請求參 數(shù)模塊用于在接收反饋消息模塊接收到所述反饋消息后,將所述請求參 數(shù)轉(zhuǎn)發(fā)至所述第二客戶端的第二代理服務(wù)器;第二代理服務(wù)器,所述第二代理服務(wù)器包括查找模塊和返回模塊, 所述查找模塊用于根據(jù)所述請求參數(shù)在第二客戶端中查找相應(yīng)的存儲文件,所述返回模塊用于將所述存儲文件返回至第一代理服務(wù)器;第二客戶端,用于向所述第二代理服務(wù)器提供所述相應(yīng)的存儲文件。優(yōu)選的,還包括啟動(dòng)裝置,用于啟動(dòng)所述第一客戶端所在局域網(wǎng)的所有客戶端的代 理服務(wù)器。優(yōu)選的,還包括生成裝置,用于生成所述存儲文件的第二MD5值。 優(yōu)選的,還包括比較裝置,用于比較所述第一 MD5值和第二 MD5值,若兩個(gè)值相 同,則所述存儲文件與所述第一客戶端需要下載的文件為同一文件,若兩 個(gè)值不同,則所述存儲文件與所述第 一客戶端需要下載的文件為不同的文 件。與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點(diǎn)在本發(fā)明實(shí)施例中,第 一客戶端的第 一代理服務(wù)器向同 一局域網(wǎng)內(nèi) 的其他代理服務(wù)器發(fā)送UDP消息,所述UDP消息包括需要下載的文件 參數(shù),從而無需登錄遠(yuǎn)程服務(wù)器,當(dāng)其他代理服務(wù)器接收到所述UDP 消息后,會根據(jù)所述消息中的文件名稱以及MD5值,查找相應(yīng)的存儲 文件,若能查找到相應(yīng)的文件,便將信息反饋給所述第一代理服務(wù)器, 通知第一代理服務(wù)器到存儲有相應(yīng)的存儲文件的第二代理服務(wù)器下載 文件,本發(fā)明可以將遠(yuǎn)程服務(wù)器下載變?yōu)榫钟蚓W(wǎng)內(nèi)下載,局域網(wǎng)內(nèi)的下 載速度大大高于廣域網(wǎng)上的下載速度,因此極大地提高了文件的下載速 度。
圖1是本發(fā)明的一種點(diǎn)對點(diǎn)下載的方法實(shí)施例1的流程圖; 圖2是本發(fā)明的一種點(diǎn)對點(diǎn)下載的方法實(shí)施例2的流程圖;圖3是本發(fā)明的 一 種點(diǎn)對點(diǎn)下載的系統(tǒng)優(yōu)選實(shí)施例的結(jié)構(gòu)框圖; 圖4是應(yīng)用圖3所示的系統(tǒng)優(yōu)選實(shí)施例進(jìn)行點(diǎn)對點(diǎn)下載的流程圖。
具體實(shí)施方式
為使本發(fā)明的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合 附圖和具體實(shí)施方式
對本發(fā)明作進(jìn)一步詳細(xì)的說明。本發(fā)明可用于眾多通用或?qū)S玫挠?jì)算系統(tǒng)環(huán)境或配置中。例如個(gè) 人計(jì)算機(jī)、服務(wù)器計(jì)算機(jī)、手持設(shè)備或便攜式設(shè)備、平板型設(shè)備、多處 理器系統(tǒng)、包括以上任何系統(tǒng)或設(shè)備的分布式計(jì)算環(huán)境等等。本發(fā)明可以在由計(jì)算機(jī)執(zhí)行的計(jì)算機(jī)可執(zhí)行指令的 一般上下文中 描述,例如程序模塊。 一般地,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定 抽象數(shù)據(jù)類型的例程、程序、對象、組件、數(shù)據(jù)結(jié)構(gòu)等等。也可以在分 布式計(jì)算環(huán)境中實(shí)踐本發(fā)明,在這些分布式計(jì)算環(huán)境中,由通過通信網(wǎng)絡(luò)而被連接的遠(yuǎn)程處理設(shè)備來執(zhí)行任務(wù)。在分布式計(jì)算環(huán)境中,程序模參考圖1,示出了本發(fā)明的一種點(diǎn)對點(diǎn)下載的方法實(shí)施例1的流程 圖,可以包括以下步驟步驟101:第一客戶端向第一代理服務(wù)器發(fā)送文件下載的請求參數(shù), 所述請求參數(shù)包括需要下載的文件信息;步驟102:根據(jù)所述請求參數(shù),所述第一代理服務(wù)器向所述第一客 戶端所處的局域網(wǎng)內(nèi)的其他客戶端發(fā)送用戶數(shù)據(jù)包協(xié)議(User Datagram Protocol, UDP )消息,所述UDP消息包括所述請求參數(shù);步驟103:所述第一代理服務(wù)器接收到所述局域網(wǎng)內(nèi)的第二客戶端 的反饋消息之后,將所述請求參數(shù)轉(zhuǎn)發(fā)至所述第二客戶端的第二代理服 務(wù)器;步驟104:所述第二代理服務(wù)器根據(jù)所述請求參數(shù)查找相應(yīng)的存儲 文件,并將所述存儲文件返回至第一代理服務(wù)器; 步驟105:所述第一客戶端保存所述存儲文件。需要說明的是,所述文件信息可以包括所述需要下載的文件名稱和第一 MD5值,所述MD5為信息-摘要算法(Message-Digest Algorithm 5 ), 通常情況下,MD5的作用是,讓大容量信息在用數(shù)字簽名軟件簽署私人 密匙前被"壓縮"成一種保密的格式。在實(shí)際中,每個(gè)文件都有一個(gè)固 定的MD5值,文件內(nèi)容一旦發(fā)生改變,文件的MD5值也會相應(yīng)地發(fā)生 變化,因此,當(dāng)所述文件信息包括了文件名稱和MD5值的時(shí)候,同一 局域網(wǎng)的其他客戶端就可以根據(jù)所述文件信息的內(nèi)容查詢相應(yīng)的文件。在實(shí)際應(yīng)用中,客戶端代理服務(wù)器的實(shí)現(xiàn)可以有多種辦法,本實(shí)施 例可以利用bat文件啟動(dòng)一個(gè)java程序,所述java程序可以完成代理服 務(wù)的功能,可以接受其他客戶端下載文件的請求,也可以理解為遠(yuǎn)程下 載服務(wù)器在本機(jī)的一個(gè)代理,以便在從局域網(wǎng)內(nèi)搜索文件時(shí),能夠使得 局域網(wǎng)內(nèi)的其他客戶端搜索到??梢钥闯觯诒緦?shí)施例中,第一客戶端的第一代理服務(wù)器通過向同 一局域網(wǎng)內(nèi)的其他代理服務(wù)器發(fā)送UDP消息,從而無需登錄遠(yuǎn)程服務(wù) 器,當(dāng)其他代理服務(wù)器接收到所述UDP消息后,會根據(jù)所述消息中的 文件名稱以及MD5值,查找相應(yīng)的存儲文件,若能查找到相應(yīng)的文件, 便將信息反饋給所述第一代理服務(wù)器,從而通知所述第一代理服務(wù)器到 存儲有相應(yīng)的存儲文件的第二代理服務(wù)器下載文件,本發(fā)明實(shí)施例可以 將遠(yuǎn)程服務(wù)器下載變?yōu)榫钟蚓W(wǎng)內(nèi)下載,局域網(wǎng)內(nèi)的下載速度大大高于廣 域網(wǎng)上的下載速度,因此極大地提高了文件的下載速度。進(jìn)一步的,本 發(fā)明實(shí)施例將多個(gè)客戶端從服務(wù)器的下載方式轉(zhuǎn)化為客戶端之間的點(diǎn) 對點(diǎn)下載,還可以減輕服務(wù)器的處理負(fù)荷,提高了服務(wù)器的性能。參考圖2,示出了本發(fā)明的一種點(diǎn)對點(diǎn)下載的方法實(shí)施例2的流程 圖,可以包括以下步驟步驟201:啟動(dòng)所述第一客戶端所在局域網(wǎng)的所有客戶端的代理服務(wù)器;在實(shí)際應(yīng)用中,每一個(gè)客戶端都需要啟動(dòng)代理服務(wù)器,優(yōu)選的,所述步驟201可以為當(dāng)操作系統(tǒng)開始運(yùn)行時(shí),啟動(dòng)所述第一客戶端所在局域網(wǎng)的所有客戶端的代理服務(wù)器;或者,優(yōu)選的,所述步驟201也可以為所述第 一客戶端所在局域網(wǎng)的所有更新組件啟動(dòng)所述局域網(wǎng)的所 有代理服務(wù)器;步驟202:第一客戶端向第一代理服務(wù)器發(fā)送文件下載的請求參數(shù), 所述請求參數(shù)包括需要下載的文件信息;步驟203:根據(jù)所述請求參數(shù),所述第一代理服務(wù)器向所述第一客 戶端所處的局域網(wǎng)內(nèi)的其他客戶端發(fā)送UDP消息,所述UDP消息包括 所述請求參數(shù);步驟204:所述第一代理服務(wù)器接收到所述局域網(wǎng)內(nèi)的第二客戶端 的反饋消息之后,將所述請求參數(shù)轉(zhuǎn)發(fā)至所述第二客戶端的第二代理服務(wù)器;步驟205:所述第二代理服務(wù)器根據(jù)所述請求參數(shù)查找相應(yīng)的存儲 文件,并將所述存儲文件返回至第一代理服務(wù)器; 步驟206:所述第一客戶端保存所述存儲文件; 步驟207:生成所述存儲文件的第二MD5值;在本實(shí)施例中,所述第一客戶端保存所述存儲文件之后,還可以生 成所述存儲文件的第二 MD5值; 優(yōu)選的,本實(shí)施例還可以包4舌步驟208:比較所述第一MD5值和第二MD5值,若兩個(gè)值相同,則 所述存儲文件與所述第一客戶端需要下載的文件為同一文件,若兩個(gè)值不 同,則所述存儲文件與所述第 一客戶端需要下載的文件為不同的文件。生成所述第二 MD5值之后,可以對第—一 MD5值和第二 MD5值進(jìn)行 比較,若兩個(gè)值相同,則所述存儲文件與所述第一客戶端需要下載的文件 為同一文件,若兩個(gè)值不同,則所述存儲文件與所述第一客戶端需要下載 的文件為不同的文件,從而對所述第 一客戶端下載的存儲文件進(jìn)行校驗(yàn), 若不是所述第一客戶端需要下載的文件,需要重新下載。需要說明的是,對于前述的各方法實(shí)施例,為了簡單描述,故將其10都表述為一系列的動(dòng)作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本發(fā)明并 不受所描述的動(dòng)作順序的限制,因?yàn)橐罁?jù)本發(fā)明,某些步驟可以采用其 他順序或者同時(shí)進(jìn)行。其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,說明書中所 描述的實(shí)施例均屬于優(yōu)選實(shí)施例,所涉及的動(dòng)作和模塊并不一定是本發(fā) 明所必須的。為使本領(lǐng)域技術(shù)人員更好地理解本發(fā)明,以下結(jié)合本發(fā)明在實(shí)際中 應(yīng)用的具體例子對本發(fā)明進(jìn)一步說明。點(diǎn)對點(diǎn)(Point to Point, P2P )下載是一種下載術(shù)語,可以理解為每 個(gè)客戶端除了可以從其他客戶端下載文件外,還可以向其他客戶端提供 文件下載的功能。同時(shí),點(diǎn)對點(diǎn)下載為一種對等互聯(lián)網(wǎng)絡(luò)技術(shù), 一種用 于不同PC用戶之間,不經(jīng)過中繼設(shè)備直接交換數(shù)據(jù)或服務(wù)的技術(shù)。在 P2P網(wǎng)絡(luò)中,PC用戶可以直接連接到其他用戶的計(jì)算機(jī),而不需要連接 到服務(wù)器上再進(jìn)行瀏覽與下載。步驟Al:啟動(dòng)所述第一客戶端所在局域網(wǎng)的所有客戶端的代理服務(wù)器;其中,本步驟的說明詳見方法實(shí)施例2,在此不再贅述;本步驟的 目的可以使所述局域網(wǎng)內(nèi)的每一個(gè)客戶端都可以處理下載請求,需要說 明的是,本地的代理服務(wù)還可以理解為一種socket監(jiān)聽,它會監(jiān)聽指定 端口請求,當(dāng)局域網(wǎng)的一臺客戶端需要下載文件時(shí),首先連接它自身的 代理服務(wù),即建立一種本地的socket連接,其中,所述代理服務(wù)器具備 接收下載請求、接收局域網(wǎng)內(nèi)的UDP廣4番消息,以及發(fā)送局域網(wǎng)內(nèi)的 UDP消息的功能;步驟A2:第一客戶端向已經(jīng)啟動(dòng)的第一代理服務(wù)器發(fā)送文件下載 的請求參數(shù),所述請求參數(shù)包括需要下載的文件信息;在實(shí)際中,所述客戶端都包括更新組件(updater)和代理服務(wù)器 (download proxy),當(dāng)客戶端的更新組件需要更新文件時(shí),就向已經(jīng)啟 動(dòng)的所述第一代理服務(wù)器發(fā)送文件下載的請求參數(shù),其中,所述請求參 數(shù)可以包括需要下載的文件名稱,本地存》丈路徑,MD5值等,在實(shí)際中,所述請求參數(shù)可以為fileName : lib\client\eas\ bd—account, client.jar , localPath: E:\kingdeel71\eas\client, md5: dl3ab90972a7b6f2f651879e44e95b02其中,發(fā)送請求參數(shù)的示例代碼可以如下所示url = "http:〃" + proxyServer + 7" + url;URL u = new URL ( url); URLConnection cn = u.openConnection (); cn.addRequestProperty ("localPath", localPath); cn.addRequestProperty ("msgVersion", "1.0"); cn.addRequestProperty ("fileName", fileName); cn.addRequestProperty ( "isSelf', "true"); if (md5!=null&&md5.length ( ) >0 )cn.addRequestProperty (MD5,md5.toLowerCase ());cn.co皿ect ();步驟A3:根據(jù)所述請求參數(shù),所述第一代理服務(wù)器向所述第一客 戶端所處的局域網(wǎng)內(nèi)的其他客戶端發(fā)送UDP消息,所述UDP消息包括 所述請求參數(shù);所述第一代理服務(wù)器接收到所述請求參數(shù)之后,根據(jù)消息參數(shù)的內(nèi) 容,例如,需要下載的文件名稱和MD5值等,向所述局域網(wǎng)內(nèi)部的其 他代理服務(wù)器發(fā)送UDP消息,所述UDP消息包括所述請求參數(shù);其中,UDP協(xié)議與TCP協(xié)議之間的不同之處,在于UDP協(xié)議不 是一種基于穩(wěn)定連接的通訊協(xié)議;UDP協(xié)議將獨(dú)立的數(shù)據(jù)包從一臺計(jì) 算機(jī)傳輸?shù)搅硗?一 臺計(jì)算機(jī),但是并不保證接受方能夠接收到該數(shù)據(jù) 包,也不保證接收方所接收到的數(shù)據(jù)和發(fā)送方所發(fā)送的數(shù)據(jù)在內(nèi)容和順 序上是完全一致的;因此,UDP協(xié)議更類似于普通郵政服務(wù),寄信人 不能夠保證所寄出去的信能夠被收信人及時(shí)收到,后發(fā)出的信也許會比先發(fā)出的信更早到達(dá);在通用的以太網(wǎng)(Ehternet)構(gòu)架下,計(jì)算機(jī)與計(jì)算機(jī)之間的數(shù)據(jù)交 換都是通過交換機(jī)來完成的;如果一份數(shù)據(jù)需要被傳送給多個(gè)接收者, 在使用TCP/IP連接的情況下,數(shù)據(jù)發(fā)送者需要向交換機(jī)發(fā)送多個(gè)同樣 的拷貝,而交換機(jī)則負(fù)責(zé)將這多個(gè)拷貝分別發(fā)送給所有的接收者;在使 用UDP數(shù)據(jù)廣播的情況下,數(shù)據(jù)發(fā)送者只需要向交換機(jī)發(fā)送一個(gè)拷貝, 交換機(jī)負(fù)責(zé)將這個(gè)信息制作多個(gè)拷貝發(fā)送給所有的機(jī)器,在這種情況 下,使用TCP/IP連接會大大的增加網(wǎng)絡(luò)的負(fù)擔(dān);在一個(gè)普通局域網(wǎng)中, 可以認(rèn)為由于網(wǎng)絡(luò)狀況較差而造成數(shù)據(jù)丟失的可能性比較小,而利用 UDP協(xié)議進(jìn)行數(shù)據(jù)交換能夠大幅度減輕網(wǎng)絡(luò)的負(fù)擔(dān),因此通過UDP協(xié) 議向局域網(wǎng)內(nèi)廣播不會造成網(wǎng)絡(luò)的阻塞,且可以很快的搜到需要下載文 件,因此本發(fā)明采用UDP廣播的方式;發(fā)送UDP廣播的示例代碼如下 sock = new DatagramSocket ( Config.MESSAGE—CLIENT—PORT , Util.getlnetAddress ( Config.subnetMask ));DatagramPacket pack = new DatagramPacket (data, 0, data.length, InetAddress.getByName ( Config.MESSAGE—UDP—GROUP ), Config.MESSAGE—SERVER—PORT ); sock.send ( pack);所述UDP消息的內(nèi)容可以為需要下載的文件名和文件的MD5值, 其中,服務(wù)socket可以如下所示sock = new MulticastSocket ( new InetSocketAddress ( addr, port));sock.joinGroup (InetAddress.getByName (Config.MESSAGE—UDP—GROUP ));步驟A4:所述局域網(wǎng)內(nèi)的第二代理服務(wù)器接收到所述UDP消息, 當(dāng)在緩存文件中查詢到所述需要下載的文件時(shí),向所述第一代理服務(wù)器 返回消息;需要說明的是,當(dāng)所述第一代理服務(wù)器向局域網(wǎng)內(nèi)其他代理服務(wù)器 發(fā)送UDP消息時(shí),其他代理服務(wù)器都會根據(jù)所述UDP消息從緩存文件中進(jìn)行查詢,所述緩存文件會在代理服務(wù)器啟動(dòng)的時(shí)候加載到內(nèi)存中,用哈希表(HashTable)的形式進(jìn)行存放,可以理解為key值為MD5值, value為文件的路徑,其中,查詢步驟的代碼可以如下所示public static String getMd5File ( String md5 ){ If ( ht!=null)return ht.getProperty( md5 ); 〃獲取緩存里是否有MD5 值對應(yīng)的文件存在;} return null;當(dāng)某一個(gè)代理服務(wù)器查詢到保存有所述需要下載的文件,且MD5 值正確,就所述第一代理服務(wù)器返回消息,以通知所述第一客戶端;需要說明的是,當(dāng)有多臺客戶端都保存有所述需要下栽的文件時(shí), 其他客戶端的代理服務(wù)器隨即返回消息,當(dāng)有一臺客戶端的代理服務(wù)器 反饋消息之后,所述第 一客戶端的第 一代理服務(wù)器即便接收到其他客戶 端的代理服務(wù)器的反饋消息,也將該反饋消息視為無效消息,不做任何 處理,或者,也可以按照優(yōu)先級的順序,優(yōu)先對某一個(gè)固定的客戶端進(jìn) 行查詢,當(dāng)這個(gè)客戶端不存在所述需要下載的文件時(shí),才到所述局域網(wǎng) 內(nèi)的其他客戶端上進(jìn)行下載,所述第一客戶端到哪一個(gè)客戶端去下載需 要的文件并不影響本發(fā)明的實(shí)現(xiàn),因此本發(fā)明對此不做限定;步驟A5:所述第一代理服務(wù)器接收到所述局域網(wǎng)內(nèi)的第二客戶端 的反饋消息之后,將所述請求參數(shù)轉(zhuǎn)發(fā)至所述第二客戶端的已經(jīng)啟動(dòng)的 第二代理服務(wù)器;所述第一代理服務(wù)器創(chuàng)建一個(gè)與所述第二代理服務(wù)器的socket連 接,并將所述的請求參數(shù)通過所述連接發(fā)送給所述第二代理服務(wù)器;步驟A6:所述第二代理服務(wù)器根據(jù)所述請求參數(shù)查找相應(yīng)的存儲 文件,并將所述存儲文件返回至第一代理服務(wù)器;所述第二代理服務(wù)器在緩存文件中查找到相應(yīng)的存儲文件,所述第 一代理服務(wù)器以流的形式寫入所述存儲文件;步驟A7:所述第一客戶端保存所述存儲文件; 所述第一客戶端將所述存儲文件保存下來,則下載任務(wù)完成; 在本例子中,代碼可以如下所示private void saveFile (URLConnection cn, DownloadTask task) throws Exceptionif ( !isSelf) return;boolean downloading = false;InputStream in = cn.getlnputStream (); 〃,人創(chuàng)建的連沖矣讀取輸入流File tempFile = null; long hasDownloaded = 0; trytask.totalBytes = cn.getContentLength (); File destFile = new File ( localPath + fileName ); if ( !destFile.getParentFile ( ) .exists ( )) { destFile.getParentFile ( ) .mkdirs ();tempFile = new File ( localPath十fileName+".rs"); RandomAccessFile tmpFile = new RandomAccessFile (tempFile,"rw"); \\ 創(chuàng)建本地臨時(shí)文件hasDownloaded = tmpFile.length (); if ( hasDownloaded > 0 ) {System.out.println ( "Continue download file[" + fileName + "] by proxy from break point [" + hasDownloaded + "]......");15tmpFile.seek ( hasDownloaded隱1 );byte[] buf = new byte[4096]; long bytesDownloaded = 0; for (;;)int len = in.read ( buf); if (len<=0) break;tmpFile.write ( buf, 0, len); W把輸入流寫入文件 bytesDownloaded += (long ) len; task.bytesDownloaded = bytesDownloaded;tmpFile.close (); downloading = true;if ( downloading)if ( destFile.exists ()) destFile.delete (); boolean b = tempFile.renameTo ( destFile ); if (!b) {throw new IOException ( "Rename failure:" +destFile );ProxyCacheFile.updateMd5File (localPath , fileName, md5); //更新緩存System.out.println ( "-------------------save file ["+fileName +"]from proxy stream success-------------------");catch ( Exception ex ) { ex.printStackTrace ();throw new RuntimeException ( "10 Exception " + ex.getMessage ( ) +"["+tempFile.getAbsolutePath ( ) +"]", ex);finally{ if (in!=null)in.close (); 〃關(guān)閉流優(yōu)選的,本例子還可以包括以下步驟 步驟A8:生成所述存儲文件的第二MD5值;步驟A9:比較所述第一MD5值和第二MD5值,若兩個(gè)值相同,則所 述存儲文件與所述第一客戶端需要下載的文件為同 一文件,若兩個(gè)值不同, 則所述存儲文件與所述第一客戶端需要下載的文件為不同的文件。局域網(wǎng)內(nèi)的下載速度大大高于廣域網(wǎng)上的下載速度,因此極大地提高了文件 的下載速度;同時(shí),在本發(fā)明實(shí)施例中,將很多客戶端從服務(wù)器的下載轉(zhuǎn)化 為了客戶端之間的點(diǎn)對點(diǎn)下載,所以可以減輕服務(wù)器的處理負(fù)荷,提高了服 務(wù)器的性能。參考圖3,示出了本發(fā)明的一種點(diǎn)對點(diǎn)下載的系統(tǒng)優(yōu)選實(shí)施例的結(jié) 構(gòu)框圖,可以包括以下裝置第一客戶端301,所述第一客戶端包括發(fā)送請求參數(shù)模塊和保存文件模塊,所述發(fā)送請求參數(shù)模塊用于向已經(jīng)啟動(dòng)的第 一代理服務(wù)器發(fā)送文件下載的請求參數(shù),所述請求參數(shù)包括需要下載的文件信息;所述保 存文件模塊用于保存從第二客戶端下載的存儲文件;第一代理服務(wù)器302,所述第一代理服務(wù)器包括發(fā)送廣播消息模塊、 接收反饋消息模塊和轉(zhuǎn)發(fā)請求參數(shù)模塊,所述發(fā)送廣播消息模塊用于根 據(jù)所述請求參數(shù),向所述第 一客戶端所處的局域網(wǎng)內(nèi)的其他客戶端發(fā)送 UDP廣播消息,所述UDP廣播消息包括所述請求參數(shù);所述接收反饋 消息模塊用于接收所述局域網(wǎng)內(nèi)的第二客戶端的反饋消息;所述轉(zhuǎn)發(fā)請 求參數(shù)模塊用于在接收反饋消息模塊接收到所述反饋消息后,將所述請 求參數(shù)轉(zhuǎn)發(fā)至所述第二客戶端的第二代理服務(wù)器;第二代理服務(wù)器303,所述第二代理服務(wù)器包括查找模塊和返回模 塊,所述查找模塊用于根據(jù)所述請求參數(shù)查找相應(yīng)的存儲文件,所述返 回模塊用于將所述存儲文件返回至第一代理服務(wù)器;第二客戶端304,用于向所述第二代理服務(wù)器提供所述相應(yīng)的存儲 文件。優(yōu)選的,所述系統(tǒng)還可以包括啟動(dòng)裝置,用于啟動(dòng)所述第一客戶端所在局域網(wǎng)的所有客戶端的代 理服務(wù)器。優(yōu)選的,所述系統(tǒng)還可以包括生成裝置,用于生成所述存儲文件的第二MD5值。優(yōu)選的,所述系統(tǒng)還可以包括比較裝置,用于比較所述第一 MD5值和第二 MD5值,若兩個(gè)值相 同,則所述存儲文件與所述第一客戶端需要下載的文件為同一文件,若兩 個(gè)值不同,則所述存儲文件與所述第一客戶端需要下載的文件為不同的文 件。在本實(shí)施例中,第一客戶端向其第一代理服務(wù)器發(fā)送文件下載請 求,所述第一代理服務(wù)器通過向所處局域網(wǎng)內(nèi)部的其他客戶端的代理服 務(wù)器發(fā)送UDP消息,查詢其他代理服務(wù)器上是否存儲有第一客戶端需 要下載的文件,若第二代理服務(wù)器查詢到相應(yīng)的存儲文件后,就可以通知所述第 一客戶端到第二客戶端上下載相應(yīng)文件,因此本發(fā)明實(shí)施例將 遠(yuǎn)程服務(wù)器下載變?yōu)榭蛻舳酥g的點(diǎn)對點(diǎn)下載,并采用UDP消息的廣 播形式,更能減輕網(wǎng)絡(luò)的負(fù)擔(dān),大大提升了下載文件的速度。參考圖4,示出了應(yīng)用圖3所示的系統(tǒng)優(yōu)選實(shí)施例進(jìn)行點(diǎn)對點(diǎn)下載 的流程圖,可以包括以下步驟步驟401:啟動(dòng)裝置啟動(dòng)第一客戶端所在局域網(wǎng)的所有客戶端的代 理服務(wù)器;步驟402:發(fā)送請求參數(shù)模塊向已經(jīng)啟動(dòng)的第一代理服務(wù)器發(fā)送文 件下載的請求參數(shù),所述請求參數(shù)包括需要下載的文件信息;步驟403:發(fā)送廣播消息模塊根據(jù)所述請求參數(shù),向所述第一客戶 端所處的局域網(wǎng)內(nèi)的其他客戶端發(fā)送UDP廣播消息,所述UDP廣播消 息包括所述請求參數(shù);步驟404:接收反饋消息模塊接收所述局域網(wǎng)內(nèi)的第二客戶端的反 饋消息;步驟405:轉(zhuǎn)發(fā)請求參數(shù)模塊在接收反饋消息模塊接收到所述反饋 消息后,將所述請求參數(shù)轉(zhuǎn)發(fā)至所述第二客戶端的已經(jīng)啟動(dòng)的第二代理 服務(wù)器;步驟406:查找模塊根據(jù)所述請求參數(shù)查找相應(yīng)的存儲文件, 步驟407:返回模塊將所述存儲文件返回至第一代理服務(wù)器; 步驟408:保存文件模塊保存從第二客戶端下載的存儲文件; 步驟409:生成裝置生成所述存儲文件的第二MD5值; 步驟4010:比較裝置比較所述第一MD5值和第二MD5值,若兩個(gè) 值相同,則所述存儲文件與所述第 一客戶端需要下載的文件為同 一文件, 若兩個(gè)值不同,則所述存儲文件與所述第一客戶端需要下載的文件為不同 的文件。需要說明的是,本說明書中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述, 每個(gè)實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間 相同相似的部分互相參見即可。對于系統(tǒng)類實(shí)施例而言,由于其與方法實(shí)施例基本相似,所以描述的比較簡單,相關(guān)之處參見方法實(shí)施例的部 分說明即可。以上對本發(fā)明所提供的 一種點(diǎn)對點(diǎn)下載的方法及點(diǎn)對點(diǎn)下載的系統(tǒng) 行了闡述,以上實(shí)施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想;同時(shí),對于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在具體 實(shí)施方式及應(yīng)用范圍上均會有改變之處,綜上所述,本說明書內(nèi)容不應(yīng) 理解為對本發(fā)明的限制。
權(quán)利要求
1、一種點(diǎn)對點(diǎn)下載的方法,其特征在于,包括第一客戶端向第一代理服務(wù)器發(fā)送文件下載的請求參數(shù),所述請求參數(shù)包括需要下載的文件信息;根據(jù)所述請求參數(shù),所述第一代理服務(wù)器向所述第一客戶端所處的局域網(wǎng)內(nèi)的其他客戶端發(fā)送用戶數(shù)據(jù)包協(xié)議UDP消息,所述UDP消息包括所述請求參數(shù);所述第一代理服務(wù)器接收到所述局域網(wǎng)內(nèi)的第二客戶端的反饋消息之后,將所述請求參數(shù)轉(zhuǎn)發(fā)至所述第二客戶端的第二代理服務(wù)器;所述第二代理服務(wù)器根據(jù)所述請求參數(shù)查找相應(yīng)的存儲文件,并將所述存儲文件返回至第一代理服務(wù)器;所述第一客戶端保存所述存儲文件。
2、 如權(quán)利要求l所述的方法,其特征在于,還包括 啟動(dòng)所述第一客戶端所在局域網(wǎng)的所有客戶端的代理服務(wù)器。
3、 如權(quán)利要求2所述的方法,其特征在于,所述啟動(dòng)所述第一客 戶端所在局域網(wǎng)的所有的客戶端的代理服務(wù)器的步驟包括當(dāng)操作系統(tǒng)開始運(yùn)行時(shí),啟動(dòng)所述第 一客戶端所在局域網(wǎng)的所有客 戶端的代理服務(wù)器。
4、 如權(quán)利要求2所述的方法,其特征在于,所述啟動(dòng)所述第一客所述第 一客戶端所在局域網(wǎng)的所有更新組件啟動(dòng)所述局域網(wǎng)的所 有代理服務(wù)器。
5、 如權(quán)利要求1所述的方法,其特征在于,所述文件信息包括所 述需要下載的文件名稱和第一 MD5值。
6、 如權(quán)利要求5所述的方法,其特征在于,所述第一客戶端保存 所述存儲文件的步驟之后,還包括生成所述存儲文件的第二 MD5值。
7、 如權(quán)利要求6所述的方法,其特征在于,還包括 比較所述第一MD5值和第二MD5值,若兩個(gè)值相同,則所述存儲文件與所述第一客戶端需要下載的文件為同一文件,若兩個(gè)值不同,則所述 存儲文件與所述第一客戶端需要下載的文件為不同的文件。
8、 一種點(diǎn)對點(diǎn)下載的系統(tǒng),其特征在于,包括第 一客戶端,所述第 一客戶端包括發(fā)送請求參數(shù)模塊和保存文件模 塊,所述發(fā)送請求參數(shù)模塊用于向已經(jīng)啟動(dòng)的第 一代理服務(wù)器發(fā)送文件 下載的請求參數(shù),所述請求參數(shù)包括需要下載的文件信息;所述保存文 件模塊用于保存從第二客戶端下載的存儲文件;第一代理服務(wù)器,所述第一代理服務(wù)器包括發(fā)送廣播消息模塊、接 收反饋消息模塊和轉(zhuǎn)發(fā)請求參數(shù)模塊,所述發(fā)送廣播消息模塊用于根據(jù) 所述請求參數(shù),向所述第一客戶端所處的局域網(wǎng)內(nèi)的其他客戶端發(fā)送 UDP消息,所述UDP廣播消息包括所述請求參數(shù);所述接收反饋消息 模塊用于接收所述局域網(wǎng)內(nèi)的第二客戶端的反饋消息;所述轉(zhuǎn)發(fā)請求參 數(shù)模塊用于在接收反饋消息模塊接收到所述反饋消息后,將所述請求參 數(shù)轉(zhuǎn)發(fā)至所述第二客戶端的第二代理服務(wù)器;第二代理服務(wù)器,所述第二代理服務(wù)器包括查找模塊和返回模塊, 所述查找模塊用于根據(jù)所述請求參數(shù)在第二客戶端中查找相應(yīng)的存儲 文件,所述返回模塊用于將所述存儲文件返回至第一代理服務(wù)器;第二客戶端,用于向所述第二代理服務(wù)器提供所述相應(yīng)的存儲文件。
9、 如權(quán)利要求8所述的系統(tǒng),其特征在于,還包括 啟動(dòng)裝置,用于啟動(dòng)所述第一客戶端所在局域網(wǎng)的所有客戶端的代理服務(wù)器。
10、 如權(quán)利要求8所述的系統(tǒng),其特征在于,還包括 生成裝置,用于生成所述存儲文件的第二MD5值。
11、 如權(quán)利要求IO所述的系統(tǒng),其特征在于,還包括 比較裝置,用于比較所述第一 MD5值和第二 MD5值,若兩個(gè)值相同,則所述存儲文件與所述第一客戶端需要下載的文件為同一文件,若兩 個(gè)值不同,則所述存儲文件與所述第 一客戶端需要下載的文件為不同的文 件。
全文摘要
本發(fā)明提供了一種點(diǎn)對點(diǎn)下載的方法,包括第一客戶端向第一代理服務(wù)器發(fā)送文件下載的請求參數(shù),所述請求參數(shù)包括需要下載的文件信息;根據(jù)所述請求參數(shù),第一代理服務(wù)器向第一客戶端所處的局域網(wǎng)內(nèi)的其他客戶端發(fā)送用戶數(shù)據(jù)包協(xié)議UDP消息,所述UDP消息包括所述請求參數(shù);第一代理服務(wù)器接收到所述局域網(wǎng)內(nèi)的第二客戶端的反饋消息之后,將所述請求參數(shù)轉(zhuǎn)發(fā)至所述第二客戶端的第二代理服務(wù)器;第二代理服務(wù)器根據(jù)所述請求參數(shù)查找相應(yīng)的存儲文件,并將存儲文件返回至第一代理服務(wù)器;第一客戶端保存所述存儲文件。運(yùn)用本發(fā)明的方法,可以把遠(yuǎn)程服務(wù)器下載變?yōu)榫钟蚓W(wǎng)內(nèi)下載,極大地提高了文件下載速度。本發(fā)明還提供了一種點(diǎn)對點(diǎn)下載的系統(tǒng)。
文檔編號H04L29/08GK101325611SQ20081012628
公開日2008年12月17日 申請日期2008年7月30日 優(yōu)先權(quán)日2008年7月30日
發(fā)明者資冰冰 申請人:金蝶軟件(中國)有限公司