基于java的多線程下載工具的實(shí)現(xiàn)_第1頁(yè)
基于java的多線程下載工具的實(shí)現(xiàn)_第2頁(yè)
基于java的多線程下載工具的實(shí)現(xiàn)_第3頁(yè)
基于java的多線程下載工具的實(shí)現(xiàn)_第4頁(yè)
基于java的多線程下載工具的實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩44頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

基于JAVA的多線程下載工具的實(shí)現(xiàn)摘要隨著現(xiàn)代科技的迅猛發(fā)展,以信息化為基礎(chǔ)的計(jì)算機(jī)技術(shù)已成為全球信息通信的雛形,計(jì)算機(jī)的發(fā)展逐漸進(jìn)入一個(gè)全新的發(fā)展階段,成為人們現(xiàn)在眾所周知的熱門(mén)話題。計(jì)算機(jī)技術(shù)的發(fā)展,使得網(wǎng)絡(luò)成為人們獲取信息的重要途徑之一。人們獲取數(shù)據(jù),進(jìn)行通信的方式其實(shí)就是將數(shù)據(jù)從一方傳送到另一方。但是在傳送的過(guò)程中,通常會(huì)由于一些突發(fā)狀況,如網(wǎng)絡(luò)接觸不良導(dǎo)致掉線、電腦死機(jī)、藍(lán)屏、或者電腦的一些其他原因,使得數(shù)據(jù)傳輸失敗。尤其適當(dāng)用戶看到已經(jīng)傳到快要完成的時(shí)候,突然中斷,導(dǎo)致其不得不重新下載,這給用戶帶來(lái)了很大的不便。多線程下載可以實(shí)現(xiàn)多個(gè)任務(wù)同步下載,大大的提高了下在速度,為用戶節(jié)省了時(shí)間。因此,研究JAVA多線程下載對(duì)人們方便使用下載工具下載內(nèi)容具有重要意義的。關(guān)鍵字JAVA;多線程下載;數(shù)據(jù)傳輸BASEDONTHEREALIZATIONOFTHEJAVAMULTITHREADDOWNLOADTOOLSABSTRACTWITHTHERAPIDDEVELOPMENTOFMODERNSCIENCEANDTECHNOLOGY,REPRESENTEDBYTHEINTERNETALSOOBTAINSTHERAPIDDEVELOPMENTOFCOMPUTERNETWORKTHEREFORE,PROMPTINGTHEDEVELOPMENTOFCOMPUTERHASENTEREDANEWSTAGE,WHICHBECOMEAHOTTOPICTHATISKNOWNTOALLANDEVERYONEHASCONCERNEDTHEDEVELOPMENTOFCOMPUTERTECHNOLOGYMAKESTHENETWORKBECOMEONEOFTHEMOSTIMPORTANTWAYSOFACCESSINGTOINFORMATIONTOGETTHEDATA,THEWAYPEOPLECOMMUNICATEISTOTRANSFERDATAFROMONEPARTYTOANOTHERPARTYBUTINTHEPROCESSOFTRANSFER,USUALLYDUETOSOMEUNEXPECTEDSITUATION,SUCHASNETWORKPOORCONTACTLEADTODROP,COMPUTERCRASHES,BLUESCREEN,ORSOMEOTHERREASONS,THECOMPUTERMAKESAFAILUREINDATATRANSMISSIONPARTICULARLYAPPROPRIATEUSERSHAVESEENITALMOSTFINISHED,SSUDDENLYBREAK,ITHASTODOWNLOADAGAIN,WHICHGIVESTHEUSERAGREATDEALOFINCONVENIENCEMULTITHREADEDDOWNLOADCANIMPLEMENTMULTIPLETASKSYNCHRONOUSDOWNLOAD,GREATLYIMPROVESTHESPEED,WHICHSAVESTIMEFORTHEUSERSTHEREFORE,BECONVENIENTFORPEOPLETOSTUDYJAVAMULTITHREADDOWNLOADINUSINGDOWNLOADTOOLSTODOWNLOADCONTENTISOFGREATSIGNIFICANCEKEYWORDSJAVAMULTITHREADEDDOWNLOADDATATRANSMISSION目錄摘要IABSTRACTII1緒論111課題背景112選題意義1121理論意義1122現(xiàn)實(shí)意義213現(xiàn)狀分析214本文結(jié)構(gòu)32常用下載技術(shù)現(xiàn)狀421WEB下載422P2P下載523流媒體下載624多線程下載73相關(guān)概念介紹931JAVA多線程932線程的創(chuàng)建和退出及其函數(shù)調(diào)用933HTTP協(xié)議1034URL和HTTPURL104多線程下載工具需求分析1141用戶需求分析1142可行性分析11421技術(shù)可行性12422經(jīng)濟(jì)可行性12423操作可行性1243業(yè)務(wù)流分析125多線程下載工具的設(shè)計(jì)1351整體設(shè)計(jì)1352模塊劃分1353數(shù)據(jù)下載流程1454關(guān)鍵技術(shù)1555基本操作156多線程下載工具的實(shí)現(xiàn)1761下載任務(wù)模塊1762線程啟動(dòng)模塊1863用戶界面模塊1964下載工具的實(shí)現(xiàn)197系統(tǒng)測(cè)試2271系統(tǒng)測(cè)試環(huán)境22711網(wǎng)絡(luò)環(huán)境22712硬件環(huán)境2372軟硬件配置23721測(cè)試程序的啟動(dòng)23722測(cè)試新建下載任務(wù)24723下載任務(wù)測(cè)試25結(jié)論26參考文獻(xiàn)27致謝28外文原文29中文翻譯391緒論11課題背景21世紀(jì)的主要特征是數(shù)字化、網(wǎng)絡(luò)化和信息化,它是以網(wǎng)絡(luò)為核心的信息化時(shí)代。計(jì)算機(jī)對(duì)社會(huì)人類社會(huì)生活的各個(gè)方面并且對(duì)經(jīng)濟(jì)的發(fā)展發(fā)揮著無(wú)可替代的作用。計(jì)算機(jī)可以使使用者快速傳輸文件資料,以及使用戶在網(wǎng)上搜索并下載個(gè)人所需的各種資料,包括圖片、音樂(lè)、小說(shuō)和視頻等。很多人認(rèn)為現(xiàn)在已經(jīng)是INTERNET的時(shí)代,因?yàn)橛?jì)算機(jī)在不斷的以各種形式改變著人們的生活和工作,他給各個(gè)國(guó)家的發(fā)展帶來(lái)了巨大的好處,并加快了全球信息化的進(jìn)程。計(jì)算機(jī)的快速發(fā)展,使得人們對(duì)數(shù)據(jù)的獲得要求也越來(lái)越高。在計(jì)算機(jī)發(fā)展初期,用戶獲得數(shù)據(jù)的方式也很簡(jiǎn)單,就是以讀取的形式,這種方式下載資料,有很多的弊端,不僅下載速度緩慢,而且當(dāng)計(jì)算機(jī)由于某種原因斷網(wǎng)、斷電或電腦故障時(shí),就會(huì)導(dǎo)致下載失敗,想要重新下載,就必須從頭開(kāi)始再下載一次。而且,如果是下載較大型的文件,其傳輸速度緩慢,給用戶帶來(lái)太多的不便。除此之外,最初的下載方式不支持一次性下載多個(gè)文件,只能下載一個(gè)。所以對(duì)于計(jì)算機(jī)不斷發(fā)展的今天,研究出一種下載快速又相對(duì)穩(wěn)定的下載工具是至關(guān)重要的?,F(xiàn)如今,計(jì)算機(jī)網(wǎng)絡(luò)以驚人的速度發(fā)展壯大,逐漸走進(jìn)尋常百姓家中,已經(jīng)成為人們生活、學(xué)習(xí)和工作的必須品。而隨著計(jì)算機(jī)的發(fā)展,對(duì)于人們獲取資源的方式也在不斷的更新。開(kāi)始人們獲取資源的形式是通過(guò)訪問(wèn)服務(wù)器,即人們熟知的C/S模式,C是客戶端,S是服務(wù)端,客戶端通過(guò)向服務(wù)器發(fā)送請(qǐng)求,然后服務(wù)器把客戶端所需的數(shù)據(jù)傳遞過(guò)去,這是最簡(jiǎn)單的傳遞方式。與此相類似的,還有目前流行的P2P(PEERTOPEER)下載技術(shù),它的實(shí)現(xiàn)原理是兩個(gè)用戶之間可以傳遞信息,而無(wú)需經(jīng)過(guò)服務(wù)器的傳輸。與C/S模式相比,這種下載方式更加快速便捷。在此基礎(chǔ)上,隨著網(wǎng)絡(luò)的快速發(fā)展,人們還研究出一種流媒體下載技術(shù),這種下載技術(shù)的優(yōu)點(diǎn)在于可以緩存下載,在使用的同時(shí)達(dá)到下載的目的,既方便了用戶的使用,也下載了資源,為用戶帶來(lái)了很大的方便。由以上的分析可以看出,隨著計(jì)算機(jī)網(wǎng)絡(luò)的不斷發(fā)展,信息在不斷更新的同時(shí),技術(shù)也在不斷的進(jìn)步,同時(shí)新的下載技術(shù)也在運(yùn)用而生,為人們的生活和工作提供極大的便利。而多線程下載技術(shù),是目前很流行的一種技術(shù),它不僅可以解決多任務(wù)下載,即幾個(gè)文件同步下載,也有斷點(diǎn)續(xù)傳的功能,即在因?yàn)楦鞣N突發(fā)狀況阻止了正常的下載時(shí),會(huì)保存已有的下載資料,當(dāng)再一次下載時(shí),會(huì)從上一次停止下載的地方開(kāi)始繼續(xù)下載。多線程下載技術(shù)還可以提高帶寬和CPU的使用效率,可見(jiàn)這種下載技術(shù)與最初的下載技術(shù)相比為用戶帶來(lái)了很多的便捷,同時(shí)也加快了下載的速度。筆者撰寫(xiě)本文,就是通過(guò)比較已有的下載工具,發(fā)掘其的優(yōu)缺點(diǎn),在此基礎(chǔ)上研究和分析多線程下載技術(shù),并實(shí)現(xiàn)了這一技術(shù)。12選題意義121理論意義從理論意義上看,多線程下載技術(shù)與傳統(tǒng)的下載工具相比,有很多優(yōu)點(diǎn),這種技術(shù)可以提高下載速度從而增強(qiáng)系統(tǒng)利用率,除此之外由于該技術(shù)能夠支持多任務(wù)同步進(jìn)行下載,所以可以提高CPU的利用率,還能充分利用系統(tǒng)內(nèi)部的有用資源。在如今的科技高速發(fā)展情況下,軟件和新技術(shù)的開(kāi)發(fā)的更新?lián)Q代速度飛快,人們對(duì)更加新穎、更加實(shí)用的軟件資源都如饑似渴,電子產(chǎn)業(yè)在擁有良好的市場(chǎng)的前提下,想要發(fā)展的話就必須擁有良好的運(yùn)作經(jīng)營(yíng)模式和遠(yuǎn)大的發(fā)展戰(zhàn)略。而實(shí)際上國(guó)內(nèi)的技術(shù)水準(zhǔn)已經(jīng)與國(guó)外許多優(yōu)秀電子企業(yè)的水準(zhǔn)不相伯仲,但是,圍欄網(wǎng)應(yīng)對(duì)更加激烈的國(guó)際競(jìng)爭(zhēng),我們必須不斷研究新技術(shù),提出新設(shè)想,設(shè)計(jì)出更加新穎方便的軟件來(lái)。因此,我們必須不斷學(xué)習(xí),研究開(kāi)發(fā)。本課題是基于學(xué)習(xí)JAVA課程以后,對(duì)其進(jìn)一步研究,深入探索,并且借鑒前人的觀點(diǎn)而提出來(lái)的,在研究前人的技術(shù)后,對(duì)JAVA多線程進(jìn)一步探索,做出了多線程下載工具。122現(xiàn)實(shí)意義從現(xiàn)實(shí)意義上看,電子時(shí)代是21世紀(jì)的新型代表,它推動(dòng)著人們的生活逐漸步入信息化時(shí)代。據(jù)不完全統(tǒng)計(jì),近幾年,我國(guó)網(wǎng)民以百分之三十多的速度遞增。據(jù)專家組統(tǒng)計(jì)目前我國(guó)網(wǎng)民的人數(shù)已經(jīng)達(dá)到四億多?,F(xiàn)如今,人們查找資料,第一時(shí)間想到的就是從網(wǎng)上獲取,下載自己所需的資源。而用戶對(duì)網(wǎng)絡(luò)的要求也不斷加大,他們?yōu)榱斯?jié)省時(shí)間,通常會(huì)選擇最安全,最穩(wěn)定,下載最快的工具來(lái)獲取資源。隨著十八大全面深化改革的提出,科技的發(fā)展占據(jù)著舉足輕重的作用,特別是對(duì)計(jì)算機(jī)技術(shù)的推動(dòng)有很重要的意義。JAVA多線程下載工具可以為人們提高工作效率,有效利用資源配置有很大的幫助,所以本課題的提出既有一定的理論意義,也有一定的現(xiàn)實(shí)意義。13現(xiàn)狀分析線程技術(shù)的提出是在60年代左右開(kāi)始的,然而,真正將多線程這一技術(shù)使用到操作系統(tǒng)中,是在80年代中期。傳統(tǒng)的UNIX通常也支持多線程技術(shù),但是一般在一個(gè)進(jìn)程中只能有一個(gè)線程,因此多線程便意味著多進(jìn)程。到目前為止,多線程技術(shù)已經(jīng)被很多操作系統(tǒng)所支持,例如WINDOWS,LINUX。為什么有了進(jìn)程這個(gè)概念后,還要引入線程的概念而且多線程技術(shù)和多進(jìn)程技術(shù)的優(yōu)點(diǎn)何在以及什么樣的技術(shù)程序會(huì)使用多線程技術(shù)這些都是應(yīng)該首先要考慮的問(wèn)題。在20世紀(jì)60年代左右,進(jìn)程這一名詞首先在麻省理工學(xué)院的MULTICS系統(tǒng)和IBM的CISS/360系統(tǒng)中被引進(jìn)和說(shuō)明。進(jìn)程和線程是調(diào)度的基本單位,它們管理的是操作系統(tǒng)的核心部分,線程描述的是進(jìn)程內(nèi)的執(zhí)行,負(fù)責(zé)執(zhí)行包含在進(jìn)程的地址空間中的代碼。進(jìn)程有三個(gè)重要特性,分別是第一,獨(dú)立性。進(jìn)程是系統(tǒng)中獨(dú)立存在的實(shí)體,它可以擁有自己獨(dú)立的資源。例如文件和設(shè)備描述符等。未經(jīng)進(jìn)程的允許,其他進(jìn)程不能訪問(wèn)到這些資源。第二,動(dòng)態(tài)性。程序只是一個(gè)靜態(tài)的指令集合,而進(jìn)程是一個(gè)正在系統(tǒng)中活動(dòng)的指令集合在進(jìn)程中加入了時(shí)間的概念。進(jìn)程具有自己的生命周期和各種不同的狀態(tài)。第三,并發(fā)性。并發(fā)性由獨(dú)立性和動(dòng)態(tài)性衍生而來(lái)。若干個(gè)進(jìn)程可以在單處理機(jī)狀態(tài)上并發(fā)執(zhí)行。并發(fā)與并行并行,指在同一時(shí)刻內(nèi),有多條指令在多個(gè)處理機(jī)上同時(shí)執(zhí)行。并發(fā),指在同一時(shí)刻內(nèi),只能有一條指令執(zhí)行,但多個(gè)進(jìn)程的指令被快速輪換執(zhí)行,使得在宏觀上具有多個(gè)進(jìn)程同時(shí)執(zhí)行的效果。線程和進(jìn)程相比有以下優(yōu)點(diǎn)第一,“節(jié)儉”的多任務(wù)操作方式。在LINUX系統(tǒng)下,啟動(dòng)一個(gè)新的進(jìn)程必須分配給獨(dú)立的地址空間,建立眾多的數(shù)據(jù)表來(lái)維護(hù)它的代碼段、堆棧段和數(shù)據(jù)段。運(yùn)行一個(gè)進(jìn)程中的多個(gè)線程,彼此之間使用相同的地址空間、共享大部分?jǐn)?shù)據(jù)、啟動(dòng)一個(gè)線程所花費(fèi)的空間遠(yuǎn)遠(yuǎn)小于啟動(dòng)一個(gè)進(jìn)程所花費(fèi)的時(shí)間。線程間彼此切換所需的時(shí)間也遠(yuǎn)遠(yuǎn)小于進(jìn)程間切換所需要的時(shí)間。第二,線程間方便的通信機(jī)制。對(duì)不同進(jìn)程來(lái)說(shuō),它們具有獨(dú)立的數(shù)據(jù)空間,要進(jìn)行數(shù)據(jù)的傳遞只能通過(guò)通信的方式進(jìn)行,這種方式費(fèi)時(shí)而不方便。由于同一進(jìn)程下的線程之間共享數(shù)據(jù)空間,它們共享全局變量、共享進(jìn)程指令、大多數(shù)數(shù)據(jù)和打開(kāi)的文件(如描述字)、信號(hào)處理程序和信號(hào)處置、當(dāng)前工作目錄、用戶ID和組ID,一個(gè)線程的數(shù)據(jù)可以直接為其他線程所用,快捷方便。第三,提高運(yùn)用程序響應(yīng)。對(duì)圖形界面的程序尤其有意義當(dāng)一個(gè)操作耗時(shí)很長(zhǎng)時(shí),整個(gè)系統(tǒng)都會(huì)等待這個(gè)操作,此時(shí)程序不會(huì)響應(yīng)鍵盤(pán)、鼠標(biāo)、菜單的操作使用多線程技術(shù),將耗時(shí)長(zhǎng)的操作置于一個(gè)新的線程,可以避免這種尷尬的情況。第四,使多CPU系統(tǒng)更加有效。操作系統(tǒng)會(huì)保證當(dāng)線程數(shù)不大于CPU數(shù)目時(shí)不同的線程運(yùn)行于不同的CPU上。第五,改善程序結(jié)構(gòu)。進(jìn)程分為多個(gè)線程,成為幾個(gè)獨(dú)立或半獨(dú)立的運(yùn)行部分,程序利于理解和修改。第六,數(shù)據(jù)共享問(wèn)題。有的變量不能同時(shí)被兩個(gè)線程所修改,有的子程序中聲明為靜態(tài)的數(shù)據(jù)更有可能給多線程程序帶來(lái)災(zāi)難性的打擊,帶來(lái)了同步問(wèn)題。這些是最需要注意的問(wèn)題。14本文結(jié)構(gòu)本文通過(guò)參考各學(xué)者們對(duì)下載工具的研究?jī)?nèi)容,深入分析各種下載技術(shù)的工作原理以及它們之間的的優(yōu)缺點(diǎn),著重探討多線程下載技術(shù),并在此基礎(chǔ)上對(duì)多線程下載技術(shù)進(jìn)行研究,實(shí)現(xiàn)其功能。首先從網(wǎng)絡(luò)的發(fā)展與現(xiàn)狀入手,對(duì)網(wǎng)絡(luò)上流行的下載工具進(jìn)行介紹。隨后總體介紹論文的研究?jī)?nèi)容,隨后闡述論文涉及到的相關(guān)技術(shù),對(duì)相關(guān)技術(shù)進(jìn)行深入分析,介紹本文設(shè)計(jì)用到的相關(guān)概念,最后對(duì)全文進(jìn)行總結(jié)。其結(jié)構(gòu)設(shè)置如下第一部分緒論主要論述關(guān)于多線程下載技術(shù)的背景介紹,研究意義,現(xiàn)狀分析等;第二部分主要是分析常用的下載技術(shù)的現(xiàn)狀,并對(duì)比分析各種下載技術(shù)的優(yōu)缺點(diǎn);第三部分對(duì)所涉及到多線程下載技術(shù)相關(guān)概念的介紹;第四部分多線程下載技術(shù)的需求分析;第五部分多線程下載技術(shù)的設(shè)計(jì)部分;第六部分多線程下載工具功能實(shí)現(xiàn)第七部分系統(tǒng)測(cè)試。2常用下載技術(shù)現(xiàn)狀網(wǎng)絡(luò)下載工具的技術(shù)的演進(jìn)大體上可以劃分為四個(gè)階段,分別是WEB下載、P2P下載、流媒體下載、多線程下載。這些技術(shù)隨著計(jì)算機(jī)的發(fā)展,不斷有所突破,不斷進(jìn)步著,給人們的生活帶來(lái)了極大的方便。以下分別對(duì)這些技術(shù)做簡(jiǎn)要的介紹,對(duì)各自的主要技術(shù)核心做出分析。21WEB下載這種方式在互聯(lián)網(wǎng)上是最常用的,也是最傳統(tǒng)的方式。最初用戶在網(wǎng)上發(fā)送郵件或者下載資料時(shí),都是使用C/S方式。C(CLIENT)是客戶,S(SERVER)是服務(wù)器它們都是在通信過(guò)程中的兩個(gè)應(yīng)用程序。當(dāng)客戶端向服務(wù)器提出下載請(qǐng)求時(shí),服務(wù)器端收到請(qǐng)求后,就會(huì)將信息資源傳輸個(gè)給客戶端。最常用的WEB下載方式有兩種,分別是HTTP和FTP,這是兩種常見(jiàn)的傳輸協(xié)議,這兩種協(xié)議規(guī)定了瀏覽器如何向服務(wù)器請(qǐng)求萬(wàn)維網(wǎng)文檔,并且服務(wù)器如何把文檔傳送給瀏覽器的過(guò)程。用戶使用這兩種協(xié)議與服務(wù)器發(fā)生鏈接,然后把數(shù)據(jù)傳送并保存到本地,實(shí)現(xiàn)下載的功能。HTTP是HYPERTEXTTRANSPORTATIONPROTOCOL的簡(jiǎn)稱,即超文本傳輸協(xié)議。這種下載方式是最傳統(tǒng)的,也是最簡(jiǎn)單的一種。其下載的基本原理就是客戶利用HTTP這種特殊的合適和規(guī)則向服務(wù)器傳遞信息,然后服務(wù)器發(fā)出應(yīng)答請(qǐng)求,將數(shù)據(jù)傳輸給用戶并保存到用戶電腦上,以此來(lái)實(shí)現(xiàn)下載的目的。這種下載方式是最初開(kāi)始的,其他在后來(lái)發(fā)展起來(lái)的下載方式都是以HTTP下載為基礎(chǔ)衍生出來(lái)的,它在所有的下載方式中發(fā)揮著很重要的作用。然而HTTP下載也存在著一些弊端,在客戶請(qǐng)求下載時(shí),必須先建立TCP連接,然后才能向服務(wù)器發(fā)送下載資源的請(qǐng)求。但是一般服務(wù)器上的數(shù)據(jù)是有限的,有時(shí)候客戶可能無(wú)法找到自己想要的信息,這就給客戶資料的來(lái)源帶來(lái)麻煩。并且,在同一時(shí)間,可能會(huì)有不同的客戶向同一臺(tái)服務(wù)器發(fā)送了下載請(qǐng)求,導(dǎo)致服務(wù)器向多個(gè)客戶發(fā)送響應(yīng),會(huì)減緩響應(yīng)的速度,從而導(dǎo)致下載速度緩慢,影響客戶的工作和學(xué)習(xí)。FTP是FILETRANSFERPROTOCOL的簡(jiǎn)稱,中文名是文件傳輸協(xié)議,它是INTERNET上使用最廣的文件傳輸協(xié)議。FTP下載也是網(wǎng)絡(luò)上下載資源很傳統(tǒng)的一種方式。它提供交互式的訪問(wèn),允許用戶指明文件類型和格式、可以控制下載數(shù)據(jù)的用戶數(shù)、屏蔽計(jì)算機(jī)系統(tǒng)的細(xì)節(jié)、可以將下載資源的速度控制在一定的范圍等這些優(yōu)勢(shì)。這種下載技術(shù)比較適合下載容量比較大的資源,比如電影、視頻等。WEB下載的工作原理見(jiàn)圖21所示。22P2P下載P2P下載(PEERTOPEER),也叫對(duì)等連接指的是兩個(gè)主機(jī)在通信的過(guò)程中不加以分別服務(wù)請(qǐng)求方和服務(wù)提供方,它們是平級(jí)的關(guān)系。在通信的過(guò)程中,如果兩臺(tái)主機(jī)之間運(yùn)行了對(duì)等連接軟件即P2P,它們之間的通信就是平等的,對(duì)等的。并且,二者之間可以相互下載對(duì)方存儲(chǔ)在硬盤(pán)中的共享文檔。P2P的工作原理的實(shí)質(zhì)還是客戶服務(wù)器的方式,但是其中的每臺(tái)主機(jī)既可以作服務(wù)器也可以做客戶機(jī),假設(shè)PC1向PC2發(fā)出下載請(qǐng)求,那么PC2作為服務(wù)器把信息傳遞給PC1,而同時(shí)PC3向PC1發(fā)出下載請(qǐng)求,此時(shí)PC1作為服務(wù)器傳遞數(shù)據(jù)給PC3。所以,PC1在這個(gè)過(guò)程中,既作為客戶機(jī)下載數(shù)據(jù),也作為服務(wù)器傳輸數(shù)據(jù)。這就是P2P的工作原理。有P2P的工作原理可以看出,P2P下載有很多優(yōu)點(diǎn)隨著網(wǎng)絡(luò)的不斷發(fā)展,網(wǎng)絡(luò)開(kāi)始提供音頻、視頻等服務(wù),利用寬帶上網(wǎng)的人數(shù)也不斷增加。而很多用戶接入寬帶是因?yàn)槠渚W(wǎng)速比較快,在下載資料時(shí)速度一般較快。這種狀況致使網(wǎng)上的一些服務(wù)器是在超負(fù)荷下工作,有些服務(wù)器甚至在許多用戶不停地訪問(wèn)時(shí)導(dǎo)致癱瘓,無(wú)法工作。而P2P下載方式不需要集中式的服務(wù)器,從而不存在集中服務(wù)器導(dǎo)致的瓶頸問(wèn)題,因而這種下載方式受到很多用戶的青睞。在P2P的工作方式下,所有的文件都是在普通的網(wǎng)絡(luò)用戶之間傳輸,其原理相當(dāng)于許多分散在各地的服務(wù)器,向其他的用戶提供下載資源。而且,P2P下載時(shí),每個(gè)主機(jī)既是服務(wù)器又是客戶機(jī),與C/S下載方式相比,降低了對(duì)服務(wù)器的性能要求,而且資源可以存儲(chǔ)在不同的節(jié)點(diǎn)(即主機(jī))之間,對(duì)服務(wù)器的壓力不會(huì)很大,實(shí)現(xiàn)了負(fù)載均衡。再者,其下載過(guò)程是不同的節(jié)點(diǎn)之間進(jìn)行的,其中如果這兩個(gè)節(jié)點(diǎn)之間出現(xiàn)了通信不暢通問(wèn)題時(shí),不會(huì)影響到其他主機(jī)之間的通信。這些優(yōu)點(diǎn)使得P2P文件下載技術(shù)在INTERNET數(shù)據(jù)下載中占據(jù)了相當(dāng)大的份額,相比WEB下載的比例要多。然而隨著P2P下載技術(shù)的廣泛使用,也產(chǎn)生了一些問(wèn)題需要解決。這些問(wèn)題的產(chǎn)生一方面使人們想辦法解決這些問(wèn)題,另一方面也促使人們開(kāi)發(fā)更為先進(jìn)的下載技術(shù)。其中最突出的問(wèn)題就是文件的知識(shí)產(chǎn)權(quán)問(wèn)題,還有就是不法分子會(huì)在網(wǎng)上傳播一些非法盜版的、不健康的視頻等,這些問(wèn)題導(dǎo)致P2P下載技術(shù)很難有效的管理,這使得這一技術(shù)在這方面問(wèn)題上還存在相當(dāng)大的難度。其實(shí),P2P網(wǎng)絡(luò)是一種較為脆弱的網(wǎng)絡(luò),P2P中節(jié)點(diǎn)之間的關(guān)系,就好比是人與人之間的關(guān)系。這些節(jié)點(diǎn)的建立,就像人際關(guān)系一樣,為了共同的目的或興趣愛(ài)好聚集在一起。它們建立關(guān)系的時(shí)候是平等互信的,但是當(dāng)網(wǎng)絡(luò)范圍擴(kuò)大時(shí),它們的關(guān)系很可能就會(huì)偏離原來(lái)的狀態(tài)。導(dǎo)致節(jié)點(diǎn)之間出現(xiàn)欺騙或傳遞虛假信息,所以P2P建立客戶端服務(wù)器服務(wù)下載請(qǐng)求收到下載請(qǐng)求圖21WEB下載原理圖的關(guān)系是較為脆弱的。而且,在P2P網(wǎng)絡(luò)中,服務(wù)器的身份已經(jīng)不是網(wǎng)絡(luò)的中心,但它扔控制整個(gè)網(wǎng)絡(luò)的工作,當(dāng)服務(wù)器出現(xiàn)故障是會(huì)導(dǎo)致整個(gè)網(wǎng)絡(luò)的癱瘓。而且,目前P2P文件共享程序的大量使用,消耗了網(wǎng)絡(luò)上的大量帶寬,加之用戶一些并非重要文件的隨意下載,以及大量視頻、音頻等較大文件的下載,導(dǎo)致帶寬的浪費(fèi)更為嚴(yán)重,致使網(wǎng)絡(luò)運(yùn)營(yíng)商也沒(méi)有從中盈利。除此之外,由于P2P網(wǎng)絡(luò)的不安全性,擁有大量用戶的網(wǎng)絡(luò)很可能成為黑客或不法分子圖利的對(duì)象,這些缺點(diǎn)導(dǎo)致P2P極大的不安全性。P2P下載方式的工作原理用圖表示,可見(jiàn)下圖22所示。23流媒體下載流媒體下載技術(shù)具有單一性,它專門(mén)用于網(wǎng)絡(luò)多媒體信息的傳播和處理。它與上述兩種下載方式不同的特點(diǎn)是它可以一邊播放一邊下載。它的使用需要一定的緩存。因?yàn)橐粋€(gè)實(shí)時(shí)音視頻源或存儲(chǔ)的音視頻文件在傳輸中被分解為許多數(shù)據(jù)包,而網(wǎng)絡(luò)是動(dòng)態(tài)變化的,各個(gè)包選擇的路由可能不同,所以到達(dá)客戶端的時(shí)延也不同,可能先發(fā)的數(shù)據(jù)包會(huì)后到。所以就要使用緩存來(lái)消除時(shí)延和抖動(dòng),以保證數(shù)據(jù)包順序正確,從而使媒體數(shù)據(jù)能夠連續(xù)輸出。其工作原理是首先它的實(shí)現(xiàn)需要合適的傳輸協(xié)議。它不使用TCP協(xié)議,因?yàn)門(mén)CP協(xié)議需要很多開(kāi)銷,它不適合傳輸實(shí)時(shí)數(shù)據(jù)。在流式傳輸實(shí)現(xiàn)中,一般采用HTTP/TCP來(lái)傳輸控制信息,而用實(shí)時(shí)傳輸協(xié)議/用戶數(shù)據(jù)報(bào)協(xié)議RIP/UDP來(lái)傳輸實(shí)時(shí)數(shù)據(jù)。當(dāng)用戶使用流媒體技術(shù)想要獲得自己做需要的信息時(shí),用戶和服務(wù)器之間就會(huì)相互交換信息,使用的協(xié)議是HTTP/TCP,那么就會(huì)尋找到所需要的數(shù)據(jù)信息;瀏覽器使用音視頻客戶程序,使用HTTP從服務(wù)器檢索相關(guān)參數(shù)對(duì)音視頻客戶程序初始化,這些參數(shù)可能包括目錄、音視頻數(shù)據(jù)的編碼類型與音視頻檢索相關(guān)的服務(wù)器地址信息等;音視頻客戶程序及音視頻服務(wù)器運(yùn)行實(shí)時(shí)流協(xié)議,以交換音視頻傳輸所需的控制服務(wù)器PC1PC2PC3圖22P2P下載技術(shù)工作原理信息,實(shí)時(shí)流協(xié)議提供執(zhí)行播放、快進(jìn)、快倒、暫停及錄制等命令的方法;音視頻服務(wù)器使用RTP/UDP協(xié)議將音視頻數(shù)據(jù)傳輸給音視頻客戶程序,一旦音視頻數(shù)據(jù)抵達(dá)客戶端,音視頻客戶程序即可播放輸出。流媒體技術(shù)應(yīng)用最廣泛的是在視頻點(diǎn)播、遠(yuǎn)程教育等方面。由流媒體的工作原理了解到,這種下載方式一方面可以緩解網(wǎng)絡(luò)傳輸?shù)呢?fù)擔(dān);另一方面可以降低對(duì)客戶端緩存的要求。并且流媒體可以實(shí)現(xiàn)一邊下載一邊播放的特點(diǎn),與傳統(tǒng)的下載工具先下載、后播放的方式相比,可以大大的縮短用戶的等待時(shí)間,給用戶帶來(lái)極大的方便。而且,一般傳輸?shù)奈募容^小,因而傳輸過(guò)程中往往比較快速,讀取信息也不會(huì)浪費(fèi)大量的時(shí)間,可以很容易的獲得,這樣可以節(jié)省不少花費(fèi)。再者該技術(shù)與傳統(tǒng)的方式不同,在輸送數(shù)據(jù)過(guò)程是不間斷的,所以它能夠很容易的追蹤與用戶有關(guān)系的信息。這一大功能在教育行業(yè)發(fā)揮了很大的作用。流媒體與傳統(tǒng)的下載工具相比還有一個(gè)更顯著的優(yōu)勢(shì)就是,我們生活中一般的電影和電視都是是單向的,內(nèi)容也是不變的(電視的內(nèi)容可以選擇)。當(dāng)人們觀看時(shí)只能被動(dòng)的接受,不管是什么節(jié)目,不能快進(jìn)、快退隨意選擇,這樣會(huì)使瀏覽者沒(méi)有選擇權(quán),只能跟隨媒體的選擇,有時(shí)會(huì)有一些用戶不想看的節(jié)目,但是用戶又必須觀看。而流媒體與傳統(tǒng)的媒體技術(shù)不同,它的資源要比傳統(tǒng)的多,而且是開(kāi)放性的,內(nèi)容也很豐富,用戶掌握了主動(dòng)權(quán),可以根據(jù)自己的意愿指揮、控制它,讓流媒體完全為自己主宰,服務(wù)于自身。雖然流媒體技術(shù)有很多優(yōu)點(diǎn),但是這種技術(shù)是在傳統(tǒng)下載技術(shù)的基礎(chǔ)上,新發(fā)展起來(lái)的媒體技術(shù),所以到目前為止它的標(biāo)準(zhǔn)不一,由此其在發(fā)展過(guò)程中可以不拘一格,以多種形式發(fā)展,從而促使其快速發(fā)展,但這也使得流媒體的發(fā)展受到障礙。目前,有關(guān)方面也意識(shí)到這個(gè)問(wèn)題,研究人員正在擬定一個(gè)適合流媒體自身發(fā)展的標(biāo)準(zhǔn)。所以流媒體的發(fā)展在管理、商業(yè)運(yùn)營(yíng)等方面還存在一些技術(shù)問(wèn)題有待解決。流媒體下載技術(shù)的工作原理如圖23所示。24多線程下載多線程是JAVA編程中的一部分,它是實(shí)現(xiàn)并發(fā)的一種重要手段,一個(gè)進(jìn)程可以通過(guò)運(yùn)行多個(gè)線程來(lái)并發(fā)地執(zhí)行多項(xiàng)任務(wù)。多線程下載指的是線程通俗的說(shuō)就相當(dāng)于定位WEB瀏覽器WEB服務(wù)器A/V播放器A/V服務(wù)器元文件HTTP/TCPRTSP/TCP圖23流媒體下載技術(shù)工作原理是通道,就像水流需要渠道一樣,線程是信息傳輸是所需要的通道。一個(gè)線程就相當(dāng)于傳輸一個(gè)文件所需要的一個(gè)通道,同樣的意思多線程就是在同時(shí)下載多個(gè)資源時(shí)必須有多個(gè)通道,就像水流從不同的渠道流出一樣,下載的資源信息也是從不同的通道傳輸。當(dāng)有好多個(gè)用戶同時(shí)申請(qǐng)從一臺(tái)服務(wù)器上下載數(shù)據(jù)的時(shí)候,這些用戶之間會(huì)共享該服務(wù)器的帶寬,當(dāng)級(jí)別相同的時(shí)候,這些用戶之間會(huì)平均獲得下載進(jìn)程。那么,線程越多,得到的資源就會(huì)越多,從而在下載資源的時(shí)候,其速度相對(duì)也會(huì)加快。多線程下載技術(shù)的優(yōu)點(diǎn)在于,它不同于單線程,單線程下載時(shí)只能發(fā)送一個(gè)請(qǐng)求,所以只能下載一個(gè)資源。而多線程恰恰相反,它可以同時(shí)發(fā)送多個(gè)請(qǐng)求,每個(gè)請(qǐng)求都會(huì)下載資源,這樣可以大大提高下載的速度,而且能夠充分使用主機(jī)資源和帶寬。基于多線程下載技術(shù)的優(yōu)點(diǎn),本文通過(guò)分析該技術(shù)的可行性和設(shè)計(jì)的總體過(guò)程,并實(shí)現(xiàn)了該下載技術(shù)。在本課程設(shè)計(jì)中,多線程技術(shù)用在新建新任務(wù)和下載線程上,在系統(tǒng)中我們可以開(kāi)始多個(gè)下載線程下載同一個(gè)網(wǎng)絡(luò)上的資源而互不干擾。從宏觀上看是并行的,但對(duì)于微觀上來(lái)說(shuō),它卻是并行運(yùn)行的,線程的運(yùn)行在操作系統(tǒng)的調(diào)度下,各自得到一定的時(shí)間片,當(dāng)某一線程獲取到時(shí)間片時(shí),它就進(jìn)入運(yùn)行狀態(tài)。各個(gè)線程按照一定的協(xié)議分別獲取時(shí)間片。3相關(guān)概念介紹31JAVA多線程JAVA語(yǔ)言是SUN公司開(kāi)發(fā)出來(lái)的一種面向?qū)ο筮M(jìn)行設(shè)計(jì)的編程語(yǔ)言。是一種具有現(xiàn)代性的計(jì)算機(jī)語(yǔ)言,隨著技術(shù)的不斷更新,JAVA已被廣泛接受并推動(dòng)了WEB的迅速發(fā)展。JAVA的一大目標(biāo)就是使程序開(kāi)發(fā)者可以交互程序,對(duì)一個(gè)問(wèn)題可以分解成多個(gè)任務(wù)來(lái)執(zhí)行。而多線程可以使編寫(xiě)的程序同時(shí)執(zhí)行多個(gè)任務(wù)。多線程指的是每個(gè)正在系統(tǒng)上運(yùn)行的程序都是一個(gè)進(jìn)程。每個(gè)進(jìn)程包含一到多個(gè)線程。進(jìn)程也可能是整個(gè)程序或者是部分程序的動(dòng)態(tài)執(zhí)行。線程是一組指令的集合,或者是程序的特殊段,它可以在程序里獨(dú)立執(zhí)行。也可以把它理解為代碼運(yùn)行的上下文。所以線程基本上是輕量級(jí)的進(jìn)程,它負(fù)責(zé)在單個(gè)程序里執(zhí)行多任務(wù)。通常由操作系統(tǒng)負(fù)責(zé)多個(gè)線程的調(diào)度和執(zhí)行。線程是程序中一個(gè)單一的順序控制流程在單個(gè)程序中同時(shí)運(yùn)行多個(gè)線程完成不同的工作,稱為多線程多線程為該程序的基石,通過(guò)開(kāi)啟多個(gè)線程對(duì)資源進(jìn)行請(qǐng)求和下載,使下載速度得到質(zhì)的飛躍,也是該項(xiàng)目的關(guān)鍵。線程有兩組突出的特點(diǎn),以下來(lái)介紹該組概念第一,線程的共性和個(gè)性。線程的共性。同一個(gè)進(jìn)程中,線程都有共性多個(gè)線程將共享同一個(gè)進(jìn)程虛擬空間。線程共享的環(huán)境包括進(jìn)程代碼段、進(jìn)程的公有數(shù)據(jù)(利用這些共享的數(shù)據(jù),線程很容易的實(shí)現(xiàn)相互之間的通訊)、線程打開(kāi)的文件描述符、信號(hào)的處理器、進(jìn)程的當(dāng)前目錄和進(jìn)程用戶ID與進(jìn)程組ID。線程的個(gè)性。線程的個(gè)性是實(shí)現(xiàn)并發(fā)性的必要條件。每個(gè)線程都有自己的線程ID,這個(gè)ID在本進(jìn)程中是唯一的。一個(gè)線程切換到另一個(gè)線程上時(shí),必須將原有的線程的寄存器集合的狀態(tài)保存,以便將來(lái)該進(jìn)程在被重新切換到時(shí)能得以恢復(fù)。線程必須擁有自己的函數(shù)堆棧,使得函數(shù)調(diào)用可以正常執(zhí)行,不受其他線程的影響。不同線程應(yīng)該擁有自己的錯(cuò)誤返回碼變量。第二,線程的并發(fā)性和并行性。線程的并發(fā)性。進(jìn)程內(nèi)至少同時(shí)有兩個(gè)線程進(jìn)行時(shí)才存在并發(fā)性問(wèn)題。在單處理器上執(zhí)行的多線程的進(jìn)程內(nèi)部,處理器可以在線程之間按照一定策略切換運(yùn)行,從而實(shí)現(xiàn)了同時(shí)執(zhí)行。線程的并行性。至少同時(shí)需要有兩個(gè)線程在執(zhí)行時(shí)才存在并行性。在共享存儲(chǔ)多處理器上執(zhí)行的同一個(gè)多線程進(jìn)程,在同一時(shí)刻內(nèi),有多條指令在多個(gè)處理機(jī)上同時(shí)執(zhí)行。32線程的創(chuàng)建和退出及其函數(shù)調(diào)用1線程的創(chuàng)建以下函數(shù)是線程的創(chuàng)建函數(shù),要?jiǎng)?chuàng)建新的線程,必須調(diào)用該函數(shù)。INTPTHTEAD_CREATEPTHTEAD_TTID,CONSTPTHTEAD_ATTR_TATTR,VOIDFUNCVOID,VOIDARG第一個(gè)參數(shù)為指向線程標(biāo)識(shí)符的指針,第二個(gè)參數(shù)用來(lái)設(shè)置線程屬性,第三個(gè)參數(shù)是線程運(yùn)行函數(shù)的起始地址,最后一個(gè)參數(shù)是運(yùn)行函數(shù)的參數(shù)。2線程的退出(1)等待線程的結(jié)束函數(shù)INTPTHREAD_JOINPTHREAD_TTID,VOIDSTATUS第一個(gè)參數(shù)為被等待的線程標(biāo)識(shí)符,第二個(gè)參數(shù)為一個(gè)用戶定義的指針,它可以用來(lái)存儲(chǔ)被等待線程的返回值。(2)終止線程函數(shù)VOIDPTHREAD_EXITVOIDVALUE_PTR唯一的參數(shù)是函數(shù)的返回代碼。33HTTP協(xié)議HTTP協(xié)議即超文本傳輸協(xié)議,是面向事務(wù)的應(yīng)用層協(xié)議,使用TCP連接進(jìn)行可靠傳輸,它是萬(wàn)維網(wǎng)能夠可靠交換文件(如文本、聲音、圖像等)的重要基礎(chǔ)。瀏覽器和服務(wù)器之間想要通信時(shí),每個(gè)網(wǎng)點(diǎn)都有一個(gè)服務(wù)器進(jìn)程,用以監(jiān)聽(tīng)TCP端口80。一旦瀏覽器發(fā)出建立連接請(qǐng)求,如果服務(wù)器監(jiān)聽(tīng)到該請(qǐng)求,就建立了TCP連接,瀏覽器就像服務(wù)器發(fā)出請(qǐng)求,服務(wù)器就會(huì)返回所請(qǐng)求的信息作為響應(yīng)。最后,將TCP連接釋放。在整個(gè)過(guò)程當(dāng)中,所遵循的規(guī)則就是HTTP協(xié)議。它使用了面向連接的TCP作為傳輸曾協(xié)議,能夠保證數(shù)據(jù)的可靠傳輸。但是要說(shuō)明的是,在客戶端瀏覽器和服務(wù)器建立連接時(shí)不一定必須使用TCP三次握手來(lái)實(shí)現(xiàn),HTTP只是假定它的傳輸層協(xié)議是可靠的,因此HTTP協(xié)議的下層協(xié)議只要是可靠的傳輸協(xié)議都可以被HTTP協(xié)議使用。雖然這種完成一次便斷開(kāi)連接的形式,看起來(lái)增加了下次通信連接的網(wǎng)絡(luò)開(kāi)銷,但是,站在服務(wù)器的角度來(lái)看,這種方式可以減少服務(wù)器的持續(xù)連接的開(kāi)銷,當(dāng)有多個(gè)客戶端連接該服務(wù)器時(shí),這種保持連接的消耗會(huì)變得非常巨大,以至于服務(wù)器不能再接收更多客戶端的連接,減少了服務(wù)器的利用率。34URL和HTTPURLURL即統(tǒng)一資源定位符,是表示從INTERNET上得到的資源位置和訪問(wèn)這些資源的方法。它給資源(如文件、圖像、視頻等)的位置提供了一種抽象的識(shí)別方法,這樣就可以給資源定位,通過(guò)這種定位,系統(tǒng)就可以對(duì)它們實(shí)施一些操作,如查找。存儲(chǔ)等。URL一般由四部分組成,它的表示方法是/因?yàn)槿f(wàn)維網(wǎng)的訪問(wèn)要使用HTTP協(xié)議,那么能夠標(biāo)識(shí)這個(gè)地址的唯一東西就是HTTP的URL。此時(shí)的表示方法就是HTTP/例如當(dāng)訪問(wèn)太原理工大學(xué)的網(wǎng)頁(yè)時(shí),其URL就是HTTP/WWWTYUTEDUCN4多線程下載工具需求分析41用戶需求分析信息化時(shí)代的今天,網(wǎng)絡(luò)成為人們生活、工作的必須品,人們獲取資料的方式也是通過(guò)網(wǎng)絡(luò)來(lái)得到。人們對(duì)網(wǎng)絡(luò)需求增加的同時(shí),對(duì)其要求也逐漸嚴(yán)格。他們都希望以最快的速度獲取信息,甚至不想多等一分鐘,有的人可能想著只要輕觸鍵盤(pán)就能獲得所需要的信息。例如,人們?cè)诰W(wǎng)上希望找到自己想要下載的視頻、音樂(lè)等。人們現(xiàn)在不單是使用瀏覽器關(guān)注網(wǎng)頁(yè)上的東西,很多人們喜歡用一些軟件下載自己想要的資料,而且對(duì)下載工具的速度和安全性要求越來(lái)越高。而多線程下載技術(shù)能夠在同一時(shí)間運(yùn)行多個(gè)線程,也就是說(shuō)它可以同時(shí)下載多個(gè)資源,通俗的說(shuō)就是可以將一個(gè)下載工作劃分為幾個(gè)小任務(wù)共同完成,這樣可以在很大程度上提高資源的下載效率。傳統(tǒng)的下載工具很難解決這樣一個(gè)問(wèn)題,就是如果下載的文件較大,或者所需的時(shí)間較長(zhǎng)時(shí),那么此時(shí)對(duì)計(jì)算機(jī)和網(wǎng)絡(luò)的要求就很高。也就是在此過(guò)程中,計(jì)算機(jī)不能出任何問(wèn)題,否則下載就會(huì)失敗。例如有時(shí)計(jì)算機(jī)會(huì)斷電、或者斷網(wǎng)、或者造成死機(jī)、藍(lán)屏等,這時(shí)必須重啟計(jì)算機(jī)。那么,要是傳統(tǒng)下載工具的話,之前下載的東西就會(huì)丟失,還要重新開(kāi)始下載,這就會(huì)浪費(fèi)用戶大量的時(shí)間。而多線程下載,有一個(gè)功能就是斷點(diǎn)續(xù)傳,意思是當(dāng)有意外終止下載時(shí),下載任務(wù)不會(huì)因此丟失,開(kāi)始重新下載時(shí),計(jì)算機(jī)會(huì)從停止的位置繼續(xù)下載,這樣可以減少不必要的麻煩,節(jié)省了大量的時(shí)間,所以多線程下載受到很多用戶的喜愛(ài)。見(jiàn)下表1所示,整合了該系統(tǒng)的需求分析表。表41多線程下載需求分析表序號(hào)功能名稱功能描述1多線程一個(gè)下載任務(wù)同時(shí)由多個(gè)線程同時(shí)下載2支持HTTP協(xié)議能夠下載HTTP類型的資源數(shù)據(jù)3斷點(diǎn)續(xù)傳當(dāng)斷電或關(guān)閉下載任務(wù)后,下次能夠繼續(xù)下載4圖形界面輸入U(xiǎn)RL地址,保存地址和文件名,線程數(shù)42可行性分析可行性分析的目的就是對(duì)所作的系統(tǒng)進(jìn)行分析,確定該系統(tǒng)是否可行。就是開(kāi)發(fā)人員盡可能用較小的人力、物力、財(cái)力達(dá)到所期望的目的。其中基本的可行性分析包括技術(shù)可行性、經(jīng)濟(jì)可行性和社會(huì)可行性。下邊分別從這三方面探討多線程下載技術(shù)實(shí)現(xiàn)的可行性。421技術(shù)可行性多線程是JAVA語(yǔ)言的中很重要的一部分知識(shí),而JAVA語(yǔ)言是目前使用最多的語(yǔ)言之一。多線程是實(shí)現(xiàn)并發(fā)的一種主要手段。在JAVA現(xiàn)有語(yǔ)言的基礎(chǔ)上,完全可以實(shí)現(xiàn)多線程下載這一任務(wù)。在開(kāi)發(fā)過(guò)程中,其技術(shù)方案是開(kāi)發(fā)工具ECLIPSEJDK開(kāi)發(fā)環(huán)境WINDOWS運(yùn)行環(huán)境WINDOWS422經(jīng)濟(jì)可行性經(jīng)濟(jì)可行性分析要估計(jì)項(xiàng)目的效益和成本,分析項(xiàng)目經(jīng)濟(jì)上是否合理和可行,能夠在最低成本的情況下,開(kāi)發(fā)出最大價(jià)值的軟件。經(jīng)濟(jì)可行性解決的最重要的兩大問(wèn)題是資金可得性和經(jīng)濟(jì)合理性。而多線程下載技術(shù)的開(kāi)發(fā),在很大程度上可以為用戶帶來(lái)便捷,能夠提高下載速度。而該下載程序的開(kāi)發(fā)也不會(huì)消耗太多的資源,所以在這方面該軟件完全符合。423操作可行性該下載程序設(shè)計(jì)好后,對(duì)用戶的計(jì)算機(jī)能力要求不高,只需要會(huì)計(jì)算機(jī)的基本操作即可。而且,程序設(shè)計(jì)的界面友好、操作非常簡(jiǎn)單,用戶不用花費(fèi)太多的時(shí)間去學(xué)習(xí),所以很容易被用戶接受。所以,從操作可行性來(lái)看,該下載工具也是相當(dāng)可行的。43業(yè)務(wù)流分析多線程下載工具的業(yè)務(wù)流程是用戶需要下載信息時(shí),首先需要登錄下載系統(tǒng),然后在新建的任務(wù)列表中填寫(xiě)與下載資源有,關(guān)的下載信息,例如資源的URL地址,資源的存儲(chǔ)路徑,以及下載任務(wù)所需的線程數(shù)等。填寫(xiě)好信息時(shí),軟件會(huì)自動(dòng)發(fā)送HTTP協(xié)議請(qǐng)求,服務(wù)器收到下載請(qǐng)求后,會(huì)返回相應(yīng)的相應(yīng)消息。服務(wù)器確定下載消息的信息無(wú)誤后,就會(huì)啟動(dòng)線程。從而將緩存中存儲(chǔ)的數(shù)據(jù)最終存儲(chǔ)到目的存儲(chǔ)路徑。除此之外,系統(tǒng)還可以完成一些基本操作,如停止、繼續(xù)、刪除任務(wù)等。以便用戶在下載資源時(shí)隨時(shí)掌控。5多線程下載工具的設(shè)計(jì)51整體設(shè)計(jì)隨著計(jì)算機(jī)的發(fā)展,人們獲取資源的途徑逐漸轉(zhuǎn)移到計(jì)算機(jī),大部分人們都喜歡從網(wǎng)上尋找想要的信息。而且,人們對(duì)資源需求加大的同時(shí),對(duì)下載的需求也增大。人們往往喜歡一次性把資源加入下載列表,這樣下載是花費(fèi)的時(shí)間也不斷增加,用戶的需求不斷充斥著下載工具的下載效率和速度。而多線程下載技術(shù),恰恰能夠有效的提高下載的速度。因?yàn)槎嗑€程下載技術(shù)最大的優(yōu)點(diǎn)就是能夠充分地利用調(diào)制解調(diào)器的數(shù)據(jù)傳輸能力,從而達(dá)到在最短的時(shí)間內(nèi)將一個(gè)軟件下載過(guò)來(lái)的目的。筆者就是通過(guò)對(duì)比分析傳統(tǒng)的下載技術(shù)和多線程下載技術(shù),分析多線程下載的特點(diǎn),并研究和實(shí)現(xiàn)了JAVA多線程下載的開(kāi)發(fā)。52模塊劃分本系統(tǒng)可以劃分為以下3大模塊1下載任務(wù)模塊對(duì)下載任務(wù)的URL資源進(jìn)行定位,并開(kāi)啟線程將資源輸出流寫(xiě)入到本地計(jì)算機(jī)下載文檔中對(duì)應(yīng)文件的固定位置。2線程啟動(dòng)模塊對(duì)下載任務(wù)線程進(jìn)行配置與啟動(dòng),相當(dāng)于整個(gè)系統(tǒng)的總裝模塊,從用戶界面取得URL參數(shù),并對(duì)下載線程配置并啟動(dòng)。3用戶界面模塊給用戶可視化的界面進(jìn)行操作,使下載工具有一個(gè)較高的易用性,通過(guò)界面,用戶將URL路徑傳遞給程序,完成下載任務(wù)。用戶界面包含的內(nèi)容有菜單欄、工具欄和下載信息欄。其界面親和力強(qiáng),用戶易于操作,用戶容易掌握。用戶界面的功能圖見(jiàn)圖51所示。圖51用戶界面功能圖用戶在下載資源時(shí),可以將任務(wù)分為以下幾部分開(kāi)始時(shí),要新建下載任務(wù),開(kāi)始下載任務(wù),中途可以暫停下載任務(wù),刪除下載任務(wù),打開(kāi)文件目錄,獲取下載源文件消息,判斷獲取的URL地址是否是有效的等功能。用戶界面按鈕工具條添加下載任務(wù)主窗口屬性面板53數(shù)據(jù)下載流程用戶調(diào)度多線程下載全部線程運(yùn)行是否生成下載文件結(jié)束圖52多線程下載數(shù)據(jù)流程圖見(jiàn)圖52所示,描述了該下載工具的整個(gè)數(shù)據(jù)流程。用戶想要下載資料時(shí),先要進(jìn)入用戶下載界面,新建一個(gè)任務(wù)欄,然后將與所下載資料的信息填入任務(wù)欄,例如URL地址。然后下載工具的進(jìn)程會(huì)想服務(wù)器發(fā)送HTTP報(bào)文請(qǐng)求,服務(wù)器收到請(qǐng)求后,會(huì)同時(shí)返回響應(yīng)報(bào)文。如果用戶填入的地址是正確的,服務(wù)器確認(rèn)后,就會(huì)啟動(dòng)線程,下載資源。如果是不合法地址,下載將無(wú)法正常進(jìn)行,用戶需要核對(duì)地址,輸入合法的URL。下載好的資源就會(huì)存儲(chǔ)到事先建立的文件夾。當(dāng)整個(gè)過(guò)程完成后,下載就結(jié)束了。54關(guān)鍵技術(shù)1HTTPURLCONNECTIONHTTPURLCONNECT類通過(guò)HTTP協(xié)議發(fā)送請(qǐng)求道服務(wù)器,并取得服務(wù)器返回的RESPONSE。URLCONNECTION是個(gè)抽象類,它有兩個(gè)直接子類分別是HTTPURLCONNECTION和JARURLCONNECTION。每個(gè)HTTPURLCONNECTION實(shí)例生成單個(gè)請(qǐng)求,請(qǐng)求后在HTTPURLCONNECTION的輸入或輸出上調(diào)用CLOSE方法可以釋放網(wǎng)絡(luò)資源,但如果在調(diào)用DISCONNECT則可能關(guān)閉BASE套接字。本程序通過(guò)HTTPURLCONNECTION可通過(guò)SETREQUESTPROPERTY“RANGE“,“STARTPS“,“ENDPAS“可以從不同位置對(duì)WEB資源進(jìn)行請(qǐng)求的特點(diǎn),將資源分拆,并通過(guò)多線程技術(shù),每個(gè)線程對(duì)資源的一部分進(jìn)行下載,實(shí)習(xí)多線程下載。2RANDOMACCESSFILERANDOMACCESSFILE用來(lái)訪問(wèn)文件,用SEEK方法來(lái)訪問(wèn)文件位置,并進(jìn)行讀寫(xiě)。這些記錄的大小不必相同;但是其大小和位置必須是可知的。但是該類僅限于操作文件。RANDOMACCESSFILE不屬于INPUTSTREAM和OUTPUTSTREAM類系的,不使用INPUTSTREAM和OUTPUTSTREAM類中的方法;是一個(gè)完全獨(dú)立的類,所有方法從零開(kāi)始寫(xiě)??偠灾?,它是一個(gè)直接繼承于OBJECT的類。RANDOMACCESSFILE的工作方式是把DATAINPUTSTREAM和DATAOUTPUTSTREAM相結(jié)合,然后使用自己的方法,它不支持只寫(xiě)文件。本程序利用其特性,將由HTTPURLCONNECTION的每一個(gè)線程所下載的資源作為一個(gè)文件的一部分,最終,當(dāng)下載完成后,可以完好的保持資源的完整性。55基本操作基本操作是在程序中頻繁使用的一些操作,這些操作可能會(huì)被執(zhí)行幾十甚至幾百次,當(dāng)這些操作被調(diào)用的時(shí)候,為了方便先做簡(jiǎn)要說(shuō)明。下載管理的主要操作有以下幾方面1SOCKET操作1創(chuàng)建一個(gè)SOCKET套接字;2綁定一個(gè)SOCKET套接字;3打開(kāi)一個(gè)SOCKET套接字;4關(guān)閉一個(gè)SOCKET套接字;5通過(guò)SOCKET套接字發(fā)送數(shù)據(jù);6從SOCKET接收數(shù)據(jù)。2HTTP連接1創(chuàng)建一個(gè)HTTP連接;2打開(kāi)一個(gè)HTTP連接;3關(guān)閉一個(gè)HTTP連接;4發(fā)送一個(gè)HTTP請(qǐng)求;5接受一個(gè)HTTP應(yīng)答。3存儲(chǔ)遠(yuǎn)程文件到本地設(shè)備1創(chuàng)建文件;2打開(kāi)文件;3關(guān)閉文件;4管理多線程的同步請(qǐng)求。4下載管理1管理多線程的并行下載;2持續(xù)跟蹤下載處理中的每個(gè)線程。6多線程下載工具的實(shí)現(xiàn)61下載任務(wù)模塊1通過(guò)繼承THREAD實(shí)現(xiàn)線程,實(shí)現(xiàn)構(gòu)造函數(shù)來(lái)初始化下載所需信息PUBLICCLASSDOWNTHREADEXTENDSTHREADPUBLICURLURLPUBLICHTTPURLCONNECTIONURLTPUBLICJLABELJLABELPUBLICLONGSTARTPSPUBLICLONGENDPASPUBLICFILEFILEPUBLICLONGTIMEPUBLICLONGTIM1PUBLICLONGTIM2PUBLICDOWNTHREADURLURL,LONGSTARTPS,LONGENDPAS,FILEFILE,JLABELLABELTHISURLURLTHISSTARTPSSTARTPSTHISENDPASENDPASTHISFILEFILETHISJLABELLABEL2重寫(xiě)RUN()函數(shù),實(shí)現(xiàn)對(duì)URL資源的定位并取得輸入流PUBLICVOIDRUNTRYURLTHTTPURLCONNECTIONURLOPENCONNECTIONURLTSETREQUESTPROPERTY“RANGE“,“BYTES“STARTPS“ENDPASINPUTSTREAMBISURLTGETINPUTSTREAM3將取得的流寫(xiě)入文檔對(duì)應(yīng)文件固定位置中RANDOMACCESSFILEFOSNEWRANDOMACCESSFILEFILE,“RW“FOSSEEKSTARTPSINTI0INTPA0WHILEPAENDPASSTARTPSIFIBISREAD1FOSWRITEIPA1;CATCHEXCEPTIONEEPRINTSTACKTRACESYSTEMOUTPRINTLN“SUCCEED1“62線程啟動(dòng)模塊1從用戶界面提取URL,得到URL信息,準(zhǔn)備下載對(duì)應(yīng)文件位置PUBLICVOIDPROCESSBTNADDACTIONLISTENERNEWACTIONLISTENERPUBLICVOIDACTIONPERFORMEDACTIONEVENTETRYSTRINGSTEXTGETTEXTURLURLNEWURLSURLCONNECTIONURLTURLOPENCONNECTIONINTLENGTHURLTGETCONTENTLENGTHLABEL1SETTEXT“總大小“LENGTH/1024“KB“INPUTSTREAMINPUTURLTGETINPUTSTREAMSTRINGSSSSPLIT“/“STRINGSS1SSSSLENGTH1FILEFILENEWFILE“D“FILESEPARATOR“DOWN“FILESEPARATORSS12開(kāi)啟線程,進(jìn)行下載DOWNTHREADDWNSNEWDOWNTHREAD10FORINTI0I10IDWNSINEWDOWNTHREADURL,ILENGTH/10,I1LENGTH/10,FILE,LABEL2DWNSISTARTCATCHEXCEPTIONE1E1PRINTSTACKTRACE63用戶界面模塊1通過(guò)繼承JFRAME實(shí)現(xiàn)PUBLICCLASSMYDOWNEXTENDSJFRAMEPRIVATEJLABELLABEL1,LABEL2,LABEL3PRIVATEJBUTTONBTNPRIVATEJTEXTFIELDTEXTPUBLICMYDOWNSTRINGSSETTITLESSETLAYOUTNEWFLOWLAYOUTSETSIZE500,85SETDEFAULTCLOSEOPERATIONJFRAMEEXIT_ON_CLOSESETLOCATION100,100BTNNEWJBUTTON“確定“TEXTNEWJTEXTFIELD20LABEL1NEWJLABEL“總大小“ADDTEXTADDLABEL1ADDLABEL2ADDLABEL3ADDBTNPROCESSSETVISIBLETRUE64下載工具的實(shí)現(xiàn)1通過(guò)資源嗅探器找到資源對(duì)應(yīng)URL圖61對(duì)應(yīng)URL2打開(kāi)下載程序,將URL復(fù)制到程序界面圖62URL下載界面3點(diǎn)擊確定,開(kāi)始下載,等待5個(gè)線程全部下載完成圖63URL下載過(guò)程界面4打開(kāi)文件夾,找到下載文件圖64URL下載結(jié)果界面7系統(tǒng)測(cè)試71系統(tǒng)測(cè)試環(huán)境711網(wǎng)絡(luò)環(huán)境對(duì)基于HTTP協(xié)議的多線程網(wǎng)絡(luò)下載系統(tǒng)運(yùn)行測(cè)試,以證明系統(tǒng)的可用性和可行性。測(cè)試在網(wǎng)絡(luò)環(huán)境下運(yùn)行,本測(cè)試環(huán)境搭建的是一個(gè)普通的局域網(wǎng)環(huán)境,通過(guò)ADSL連接INTERNET,同時(shí),在網(wǎng)絡(luò)中有交換機(jī)。防火墻等網(wǎng)絡(luò)設(shè)備,在局域網(wǎng)中的一種一臺(tái)主機(jī)上,運(yùn)行網(wǎng)絡(luò)下載系統(tǒng),下載遠(yuǎn)程網(wǎng)絡(luò)中的某一資源。系統(tǒng)測(cè)試的網(wǎng)絡(luò)環(huán)境見(jiàn)圖71所示。執(zhí)行下載主機(jī)1下載主機(jī)主機(jī)2INTERNET圖71實(shí)驗(yàn)環(huán)境配置圖交換機(jī)ADSL防火墻用戶712硬件環(huán)境作為測(cè)試,整個(gè)測(cè)試系統(tǒng)還需要設(shè)定相應(yīng)的硬件及網(wǎng)絡(luò)性能的配置信息,測(cè)試網(wǎng)絡(luò)下載系統(tǒng)的硬件配置環(huán)境如表1所示表71網(wǎng)絡(luò)下載系統(tǒng)測(cè)試的軟硬件環(huán)境下載主機(jī)硬件配置名稱性能參數(shù)CPU233GHZ2(或以上)內(nèi)存20GB硬盤(pán)大于所下載文件的容量即可網(wǎng)絡(luò)配置正常連接INTERNET即可軟件環(huán)境名稱版本JRE60理論上講,本下載系統(tǒng)只需在聯(lián)網(wǎng)的條件下就可以運(yùn)行,對(duì)主機(jī)性能沒(méi)有特殊要求,因?yàn)橄到y(tǒng)是基于JAVA語(yǔ)言開(kāi)發(fā)而成的,所以在系統(tǒng)運(yùn)行的主機(jī)上,還需要安裝JAVA虛擬機(jī)。72軟硬件配置各種配置設(shè)定完后,測(cè)試環(huán)境搭建好后,就可以進(jìn)行系統(tǒng)測(cè)試。當(dāng)用戶在下載主機(jī)上輸入要下載的資源URL信息,然后啟動(dòng)下載系統(tǒng)。下載系統(tǒng)啟動(dòng)后,會(huì)根據(jù)URL信息去連接資源所在的主機(jī),接著跟主機(jī)通信,確定資源文件的大小,然后啟動(dòng)多線程同時(shí)訪問(wèn)遠(yuǎn)程資源,并通過(guò)HTTP協(xié)議將資源文件傳輸?shù)奖镜亍?duì)傳輸?shù)奖镜氐亩鄠€(gè)分片數(shù)據(jù),通過(guò)文件的寫(xiě)操作將文件的分片數(shù)據(jù)重構(gòu)為原始的文件,最后將文件存儲(chǔ)到本地。這樣就將遠(yuǎn)程資源從服務(wù)器一端傳輸?shù)娇蛻魴C(jī)一端,完成了一次網(wǎng)絡(luò)下載活動(dòng)。在完成一次下載活動(dòng)的整個(gè)過(guò)程中,對(duì)系統(tǒng)的性能、指標(biāo)、設(shè)計(jì)參數(shù)等進(jìn)行測(cè)試,測(cè)試結(jié)果如下721測(cè)試程序的啟動(dòng)下載系統(tǒng)部署到主機(jī)上后,直接點(diǎn)擊程序啟動(dòng)按鈕,就可以運(yùn)行下載系統(tǒng)。網(wǎng)絡(luò)下載系統(tǒng)開(kāi)始運(yùn)行后,整個(gè)運(yùn)行及展示的界面如圖72所示。圖72用戶界面圖72所示的是系統(tǒng)運(yùn)行的主界面,也就是系統(tǒng)設(shè)計(jì)中所說(shuō)的用戶用來(lái)操作和管理整個(gè)下載過(guò)程的統(tǒng)一接口。在菜單欄中,是控制下載的命令按鍵,主界面顯示了所有下載的文件、下載的速度和瞬時(shí)下載速度。722測(cè)試新建下載任務(wù)在操作菜單中,單擊“新建下載”,就會(huì)彈出新建下載的設(shè)置界面,見(jiàn)圖73所示。圖73新建下載任務(wù)在新建下載任務(wù)過(guò)程中,需要手動(dòng)添加需要下載文件的URL信息,系統(tǒng)會(huì)將

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論