基于JAVA的多線程工具的實(shí)現(xiàn)計(jì)算機(jī)畢業(yè)設(shè)計(jì)論文_第1頁(yè)
基于JAVA的多線程工具的實(shí)現(xiàn)計(jì)算機(jī)畢業(yè)設(shè)計(jì)論文_第2頁(yè)
基于JAVA的多線程工具的實(shí)現(xiàn)計(jì)算機(jī)畢業(yè)設(shè)計(jì)論文_第3頁(yè)
基于JAVA的多線程工具的實(shí)現(xiàn)計(jì)算機(jī)畢業(yè)設(shè)計(jì)論文_第4頁(yè)
基于JAVA的多線程工具的實(shí)現(xiàn)計(jì)算機(jī)畢業(yè)設(shè)計(jì)論文_第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)介

1、基于JAVA的多線程下載工具的實(shí)現(xiàn)摘 要隨著現(xiàn)代科技的迅猛發(fā)展,以信息化為基礎(chǔ)的計(jì)算機(jī)技術(shù)已成為全球信息通信的雛形,計(jì)算機(jī)的發(fā)展逐漸進(jìn)入一個(gè)全新的發(fā)展階段,成為人們現(xià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é)省

2、了時(shí)間。因此,研究JAVA多線程下載對(duì)人們方便使用下載工具下載內(nèi)容具有重要意義的。關(guān)鍵字:JAVA;多線程下載;數(shù)據(jù)傳輸Based on the Realization of the Java Multi-thread Download ToolsAbstractWith the rapid development of modern science and technology, represented by the Internet also obtains the rapid development of computer network. Therefore, prompting th

3、e development of computer has entered a new stage, which become a hot topic that is known to all and everyone has concerned. The development of computer technology makes the network become one of the most important ways of accessing to information. To get the data, the way people communicate is to t

4、ransfer data from one party to another party. But in the process of transfer, usually due to some unexpected situation, such as network poor contact lead t o drop, computer crashes, blue screen, or some other reasons, the computer makes a failure in data transmission. Particularly appropriate users

5、have seen it almost finished, s suddenly break, it has to download again, which gives the user a great deal of inconvenience. Multi-threaded download can implement multiple task synchronous download, greatly improves the speed, which saves time for the users. Therefore, be convenient for people to s

6、tudy JAVA multi-thread download in using download tools to download content is of great significance.Key words: Java; Multi-threaded download; data transmission目 錄摘 要IAbstractII1 緒論11.1 課題背景11.2 選題意義11.2.1 理論意義11.2.2 現(xiàn)實(shí)意義21.3 現(xiàn)狀分析21.4 本文結(jié)構(gòu)32 常用下載技術(shù)現(xiàn)狀42.1 Web下載42.2 P2P下載52.3 流媒體下載62.4 多線程下載73 相關(guān)概念介紹9

7、3.1 Java多線程93.2 線程的創(chuàng)建和退出及其函數(shù)調(diào)用93.3 HTTP協(xié)議103.4 URL和HTTP URL104 多線程下載工具需求分析114.1 用戶需求分析114.2 可行性分析114.2.1 技術(shù)可行性124.2.2 經(jīng)濟(jì)可行性124.2.3 操作可行性124.3 業(yè)務(wù)流分析125 多線程下載工具的設(shè)計(jì)135.1 整體設(shè)計(jì)135.2 模塊劃分135.3 數(shù)據(jù)下載流程145.4 關(guān)鍵技術(shù)155.5 基本操作156 多線程下載工具的實(shí)現(xiàn)176.1 下載任務(wù)模塊176.2 線程啟動(dòng)模塊186.3 用戶界面模塊196.4 下載工具的實(shí)現(xiàn)197 系統(tǒng)測(cè)試227.1 系統(tǒng)測(cè)試環(huán)境227.

8、1.1 網(wǎng)絡(luò)環(huán)境227.1.2 硬件環(huán)境237.2 軟硬件配置237.2.1 測(cè)試程序的啟動(dòng)237.2.2 測(cè)試新建下載任務(wù)247.2.3 下載任務(wù)測(cè)試25結(jié)論26參考文獻(xiàn)27致謝28外文原文29中文翻譯3921 緒論1.1 課題背景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ó)家

9、的發(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)致下載失敗,想要重新下載,就必須從頭開始再下載一次。而且,如果是下載較大型的文件,其傳輸速度緩慢,給用戶帶來(lái)太多的不便。除此之外,最初的下載方式不支持一次性下載多個(gè)文件,只能下載一個(gè)。所以對(duì)于計(jì)算機(jī)不斷發(fā)展的今天,研究出一種下載快速又相對(duì)穩(wěn)定的下載工具是至關(guān)重要的?,F(xiàn)如今,計(jì)算機(jī)網(wǎng)絡(luò)以驚人的速度發(fā)展壯大,逐漸走進(jìn)尋常百姓家中

10、,已經(jīng)成為人們生活、學(xué)習(xí)和工作的必須品。而隨著計(jì)算機(jī)的發(fā)展,對(duì)于人們獲取資源的方式也在不斷的更新。開始人們獲取資源的形式是通過(guò)訪問(wèn)服務(wù)器,即人們熟知的C/S模式,C是客戶端,S是服務(wù)端,客戶端通過(guò)向服務(wù)器發(fā)送請(qǐng)求,然后服務(wù)器把客戶端所需的數(shù)據(jù)傳遞過(guò)去,這是最簡(jiǎn)單的傳遞方式。與此相類似的,還有目前流行的P2P(Peer-To-Peer)下載技術(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á)到下載的目的,既方便了用戶的使用

11、,也下載了資源,為用戶帶來(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ì)從上一次停止下載的地方開始繼續(xù)下載。多線程下載技術(shù)還可以提高帶寬和CPU的使用效率,可見這種下載技術(shù)與最初的下載技術(shù)相比為用戶帶來(lái)了很多的便捷,同時(shí)也加快了下載的速度。筆者撰寫本文,就是通過(guò)比較已有的下載工具,發(fā)掘其的

12、優(yōu)缺點(diǎn),在此基礎(chǔ)上研究和分析多線程下載技術(shù),并實(shí)現(xiàn)了這一技術(shù)。1.2 選題意義1.2.1 理論意義從理論意義上看,多線程下載技術(shù)與傳統(tǒng)的下載工具相比,有很多優(yōu)點(diǎn),這種技術(shù)可以提高下載速度從而增強(qiáng)系統(tǒng)利用率,除此之外由于該技術(shù)能夠支持多任務(wù)同步進(jìn)行下載,所以可以提高CPU的利用率,還能充分利用系統(tǒng)內(nèi)部的有用資源。在如今的科技高速發(fā)展情況下,軟件和新技術(shù)的開發(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ì)更加

13、激烈的國(guó)際競(jìng)爭(zhēng),我們必須不斷研究新技術(shù),提出新設(shè)想,設(shè)計(jì)出更加新穎方便的軟件來(lái)。因此,我們必須不斷學(xué)習(xí),研究開發(fā)。本課題是基于學(xué)習(xí)Java課程以后,對(duì)其進(jìn)一步研究,深入探索,并且借鑒前人的觀點(diǎn)而提出來(lái)的,在研究前人的技術(shù)后,對(duì)Java多線程進(jìn)一步探索,做出了多線程下載工具。1.2.2 現(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í)間,

14、通常會(huì)選擇最安全,最穩(wěn)定,下載最快的工具來(lái)獲取資源。隨著十八大全面深化改革的提出,科技的發(fā)展占據(jù)著舉足輕重的作用,特別是對(duì)計(jì)算機(jī)技術(shù)的推動(dòng)有很重要的意義。Java多線程下載工具可以為人們提高工作效率,有效利用資源配置有很大的幫助,所以本課題的提出既有一定的理論意義,也有一定的現(xiàn)實(shí)意義。1.3 現(xiàn)狀分析線程技術(shù)的提出是在60年代左右開始的,然而,真正將多線程這一技術(shù)使用到操作系統(tǒng)中,是在80年代中期。傳統(tǒng)的Unix通常也支持多線程技術(shù),但是一般在一個(gè)進(jìn)程中只能有一個(gè)線程,因此多線程便意味著多進(jìn)程。到目前為止,多線程技術(shù)已經(jīng)被很多操作系統(tǒng)所支持,例如:Windows,Linux。為什么有了進(jìn)程這個(gè)

15、概念后,還要引入線程的概念?而且多線程技術(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è)正

16、在系統(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)

17、一個(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ù)和打開的文件(如描述字)、信號(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)鍵盤、鼠標(biāo)、菜單的操作使用多線程技

18、術(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)題。1.4 本文結(jié)構(gòu)本文通過(guò)參考各學(xué)者們對(duì)下載工具的研究?jī)?nèi)容,深入分析各種下載技術(shù)的工作原理以及它們之間的的優(yōu)缺點(diǎn),著重探討多線程下載技術(shù),并在此基礎(chǔ)上對(duì)多線程下載技術(shù)進(jìn)行研究,實(shí)現(xiàn)其功能。首

19、先從網(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è)階段,分別

20、是Web下載、P2P下載、流媒體下載、多線程下載。這些技術(shù)隨著計(jì)算機(jī)的發(fā)展,不斷有所突破,不斷進(jìn)步著,給人們的生活帶來(lái)了極大的方便。以下分別對(duì)這些技術(shù)做簡(jiǎn)要的介紹,對(duì)各自的主要技術(shù)核心做出分析。2.1 Web下載這種方式在互聯(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,這是兩種常見的傳輸協(xié)議,這兩種協(xié)議規(guī)定了瀏覽器如何向服務(wù)器

21、請(qǐng)求萬(wàn)維網(wǎng)文檔,并且服務(wù)器如何把文檔傳送給瀏覽器的過(guò)程。用戶使用這兩種協(xié)議與服務(wù)器發(fā)生鏈接,然后把數(shù)據(jù)傳送并保存到本地,實(shí)現(xiàn)下載的功能。HTTP是Hyper Text Transportation Protocol的簡(jiǎn)稱,即超文本傳輸協(xié)議。這種下載方式是最傳統(tǒng)的,也是最簡(jiǎn)單的一種。其下載的基本原理就是客戶利用HTTP這種特殊的合適和規(guī)則向服務(wù)器傳遞信息,然后服務(wù)器發(fā)出應(yīng)答請(qǐng)求,將數(shù)據(jù)傳輸給用戶并保存到用戶電腦上,以此來(lái)實(shí)現(xiàn)下載的目的。這種下載方式是最初開始的,其他在后來(lái)發(fā)展起來(lái)的下載方式都是以HTTP下載為基礎(chǔ)衍生出來(lái)的,它在所有的下載方式中發(fā)揮著很重要的作用。然而HTTP下載也存在著一些弊端

22、,在客戶請(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是File Transfer Protocol的簡(jiǎn)稱,中文名是文件傳輸協(xié)議,它是Internet上使用最廣的文件傳輸協(xié)議。FTP下載也是網(wǎng)絡(luò)上下載資源很傳統(tǒng)的一種方式。它提供交互式的訪問(wèn),允許用戶指明文件類型和格式、可以控制下載數(shù)據(jù)的用戶數(shù)、屏蔽計(jì)算機(jī)系統(tǒng)的

23、細(xì)節(jié)、可以將下載資源的速度控制在一定的范圍等這些優(yōu)勢(shì)。這種下載技術(shù)比較適合下載容量比較大的資源,比如:電影、視頻等。客戶端服務(wù)器服務(wù)下載請(qǐng)求收到下載請(qǐng)求Web下載的工作原理見圖2.1所示。圖2.1 Web下載原理圖2.2 P2P下載P2P下載(Peer-To-Peer),也叫對(duì)等連接指的是兩個(gè)主機(jī)在通信的過(guò)程中不加以分別服務(wù)請(qǐng)求方和服務(wù)提供方,它們是平級(jí)的關(guān)系。在通信的過(guò)程中,如果兩臺(tái)主機(jī)之間運(yùn)行了對(duì)等連接軟件即P2P,它們之間的通信就是平等的,對(duì)等的。并且,二者之間可以相互下載對(duì)方存儲(chǔ)在硬盤中的共享文檔。P2P的工作原理的實(shí)質(zhì)還是客戶服務(wù)器的方式,但是其中的每臺(tái)主機(jī)既可以作服務(wù)器也可以做客戶

24、機(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ò)開始提供音頻、視頻等服務(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)致

25、的瓶頸問(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ù)的廣

26、泛使用,也產(chǎn)生了一些問(wèn)題需要解決。這些問(wèn)題的產(chǎn)生一方面使人們想辦法解決這些問(wèn)題,另一方面也促使人們開發(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)系一樣,為了共同的目的或興趣愛好聚集在一起。它們建立關(guān)系的時(shí)候是平等互信的,但是當(dāng)網(wǎng)絡(luò)范圍擴(kuò)大時(shí),它們的關(guān)系很可能就會(huì)偏離原來(lái)的狀態(tài)。導(dǎo)致節(jié)點(diǎn)之間出現(xiàn)欺騙或傳遞虛假信息,所以

27、P2P建立的關(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下載方式的工作原理用圖表示,可見下圖2.2所示。服務(wù)器PC1PC2PC3圖2.2 P2P下載技術(shù)工作原理2.3 流媒體下載流媒體下

28、載技術(shù)具有單一性,它專門用于網(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)門CP協(xié)議需要很多開銷,它不適合傳輸實(shí)時(shí)數(shù)據(jù)。在流式傳輸實(shí)現(xiàn)中,一般采用HTTP/TCP來(lái)傳輸控制信息,而用實(shí)時(shí)傳輸協(xié)議/用戶數(shù)據(jù)報(bào)協(xié)議RIP/U

29、DP來(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é)議,以交換音視頻傳輸所需的控制信息,實(shí)時(shí)流協(xié)議提供執(zhí)行播放、快進(jìn)、快倒、暫停及錄制等命令的方法;音視頻服務(wù)器使用RTP/UDP協(xié)議將音視頻數(shù)據(jù)傳輸給音視頻客戶程序,一旦音視頻數(shù)據(jù)抵達(dá)客戶端,音視頻客戶程序即可播放輸出。流媒體技術(shù)應(yīng)用最

30、廣泛的是在視頻點(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ì)就是,我們生活中一

31、般的電影和電視都是是單向的,內(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)的多,而且是開放性的,內(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ā)

32、展受到障礙。目前,有關(guān)方面也意識(shí)到這個(gè)問(wèn)題,研究人員正在擬定一個(gè)適合流媒體自身發(fā)展的標(biāo)準(zhǔn)。所以流媒體的發(fā)展在管理、商業(yè)運(yùn)營(yíng)等方面還存在一些技術(shù)問(wèn)題有待解決。定位Web瀏覽器Web服務(wù)器A/V播放器A/V服務(wù)器元文件HTTP/TCPRTSP/TCP流媒體下載技術(shù)的工作原理如圖2.3所示。圖2.3 流媒體下載技術(shù)工作原理2.4 多線程下載多線程是Java編程中的一部分,它是實(shí)現(xiàn)并發(fā)的一種重要手段,一個(gè)進(jìn)程可以通過(guò)運(yùn)行多個(gè)線程來(lái)并發(fā)地執(zhí)行多項(xiàng)任務(wù)。多線程下載指的是:線程通俗的說(shuō)就相當(dāng)于是通道,就像水流需要渠道一樣,線程是信息傳輸是所需要的通道。一個(gè)線程就相當(dāng)于傳輸一個(gè)文件所需要的一個(gè)通道,同樣的意思

33、多線程就是在同時(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è)

34、計(jì)的總體過(guò)程,并實(shí)現(xiàn)了該下載技術(shù)。在本課程設(shè)計(jì)中,多線程技術(shù)用在新建新任務(wù)和下載線程上,在系統(tǒng)中我們可以開始多個(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)概念介紹3.1 Java多線程Java語(yǔ)言是Sun公司開發(fā)出來(lái)的一種面向?qū)ο筮M(jìn)行設(shè)計(jì)的編程語(yǔ)言。是一種具有現(xiàn)代性的計(jì)算機(jī)語(yǔ)言,隨著技術(shù)的不斷更新,Java已被廣泛接受并推動(dòng)了Web的迅速發(fā)展。Java的一大目標(biāo)就是使程序開發(fā)者可以交互程序,對(duì)一個(gè)問(wèn)

35、題可以分解成多個(gè)任務(wù)來(lái)執(zhí)行。而多線程可以使編寫的程序同時(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ò)開啟多個(gè)線程對(duì)資源進(jìn)行請(qǐng)求和下載,使下載速度得到質(zhì)的飛躍,也是該項(xiàng)目的關(guān)鍵。線程有兩組突出

36、的特點(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)相互之間的通訊)、線程打開的文件描述符、信號(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í)行,不受其他線程的影響。不同線

37、程應(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í)行。3.2 線程的創(chuàng)建和退出及其函數(shù)調(diào)用1. 線程的創(chuàng)建以下函數(shù)是線程的創(chuàng)建函數(shù),要?jiǎng)?chuàng)建新的線程,必須調(diào)用該函數(shù)。int pthtead_create(pthtead_t *tid, const pthtead_attr_t *att

38、r, void *(*func)(void *),void *arg):第一個(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ù):int pthread_join(pthread_ttid,void*status):第一個(gè)參數(shù)為被等待的線程標(biāo)識(shí)符,第二個(gè)參數(shù)為一個(gè)用戶定義的指針,它可以用來(lái)存儲(chǔ)被等待線程的返回值。(2)終止線程函數(shù):void pthread_exit(void*value_ptr):唯一的參數(shù)是函數(shù)的返回代碼。3.3 HTTP協(xié)議HTTP協(xié)議即超文本傳輸協(xié)議,是面向事務(wù)

39、的應(yīng)用層協(xié)議,使用TCP連接進(jìn)行可靠傳輸,它是萬(wàn)維網(wǎng)能夠可靠交換文件(如文本、聲音、圖像等)的重要基礎(chǔ)。瀏覽器和服務(wù)器之間想要通信時(shí),每個(gè)網(wǎng)點(diǎn)都有一個(gè)服務(wù)器進(jìn)程,用以監(jiān)聽TCP端口80。一旦瀏覽器發(fā)出建立連接請(qǐng)求,如果服務(wù)器監(jiān)聽到該請(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é)議的下層

40、協(xié)議只要是可靠的傳輸協(xié)議都可以被HTTP協(xié)議使用。雖然這種完成一次便斷開連接的形式,看起來(lái)增加了下次通信連接的網(wǎng)絡(luò)開銷,但是,站在服務(wù)器的角度來(lái)看,這種方式可以減少服務(wù)器的持續(xù)連接的開銷,當(dāng)有多個(gè)客戶端連接該服務(wù)器時(shí),這種保持連接的消耗會(huì)變得非常巨大,以至于服務(wù)器不能再接收更多客戶端的連接,減少了服務(wù)器的利用率。3.4 URL和HTTP URLURL即統(tǒng)一資源定位符,是表示從Internet上得到的資源位置和訪問(wèn)這些資源的方法。它給資源(如文件、圖像、視頻等)的位置提供了一種抽象的識(shí)別方法,這樣就可以給資源定位,通過(guò)這種定位,系統(tǒng)就可以對(duì)它們實(shí)施一些操作,如查找。存儲(chǔ)等。URL一般由四部分組成

41、,它的表示方法是:<協(xié)議>:/<主機(jī)>:<端口>/<路徑>因?yàn)槿f(wàn)維網(wǎng)的訪問(wèn)要使用HTTP協(xié)議,那么能夠標(biāo)識(shí)這個(gè)地址的唯一東西就是HTTP的URL。此時(shí)的表示方法就是:HTTP:/ <主機(jī)>:<端口>/<路徑>例如當(dāng)訪問(wèn)太原理工大學(xué)的網(wǎng)頁(yè)時(shí),其URL就是: 4 多線程下載工具需求分析4.1 用戶需求分析信息化時(shí)代的今天,網(wǎng)絡(luò)成為人們生活、工作的必須品,人們獲取資料的方式也是通過(guò)網(wǎng)絡(luò)來(lái)得到。人們對(duì)網(wǎng)絡(luò)需求增加的同時(shí),對(duì)其要求也逐漸嚴(yán)格。他們都希望以最快的速度獲取信息,甚至不想多等一分鐘,有的人可能想著只要輕觸鍵盤就

42、能獲得所需要的信息。例如,人們?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)屏等

43、,這時(shí)必須重啟計(jì)算機(jī)。那么,要是傳統(tǒng)下載工具的話,之前下載的東西就會(huì)丟失,還要重新開始下載,這就會(huì)浪費(fèi)用戶大量的時(shí)間。而多線程下載,有一個(gè)功能就是斷點(diǎn)續(xù)傳,意思是當(dāng)有意外終止下載時(shí),下載任務(wù)不會(huì)因此丟失,開始重新下載時(shí),計(jì)算機(jī)會(huì)從停止的位置繼續(xù)下載,這樣可以減少不必要的麻煩,節(jié)省了大量的時(shí)間,所以多線程下載受到很多用戶的喜愛。見下表1所示,整合了該系統(tǒng)的需求分析表。表4.1 多線程下載需求分析表序號(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地址,保存地址和文件名

44、,線程數(shù)4.2 可行性分析 可行性分析的目的就是對(duì)所作的系統(tǒng)進(jìn)行分析,確定該系統(tǒng)是否可行。就是開發(fā)人員盡可能用較小的人力、物力、財(cái)力達(dá)到所期望的目的。其中基本的可行性分析包括技術(shù)可行性、經(jīng)濟(jì)可行性和社會(huì)可行性。下邊分別從這三方面探討多線程下載技術(shù)實(shí)現(xiàn)的可行性。4.2.1 技術(shù)可行性 多線程是Java語(yǔ)言的中很重要的一部分知識(shí),而Java語(yǔ)言是目前使用最多的語(yǔ)言之一。多線程是實(shí)現(xiàn)并發(fā)的一種主要手段。在Java現(xiàn)有語(yǔ)言的基礎(chǔ)上,完全可以實(shí)現(xiàn)多線程下載這一任務(wù)。在開發(fā)過(guò)程中,其技術(shù)方案是:開發(fā)工具:Eclipse+JDK開發(fā)環(huán)境:windows運(yùn)行環(huán)境:windows4.2.2 經(jīng)濟(jì)可行性經(jīng)濟(jì)可行性

45、分析要估計(jì)項(xiàng)目的效益和成本,分析項(xiàng)目經(jīng)濟(jì)上是否合理和可行,能夠在最低成本的情況下,開發(fā)出最大價(jià)值的軟件。經(jīng)濟(jì)可行性解決的最重要的兩大問(wèn)題是資金可得性和經(jīng)濟(jì)合理性。而多線程下載技術(shù)的開發(fā),在很大程度上可以為用戶帶來(lái)便捷,能夠提高下載速度。而該下載程序的開發(fā)也不會(huì)消耗太多的資源,所以在這方面該軟件完全符合。4.2.3 操作可行性該下載程序設(shè)計(jì)好后,對(duì)用戶的計(jì)算機(jī)能力要求不高,只需要會(huì)計(jì)算機(jī)的基本操作即可。而且,程序設(shè)計(jì)的界面友好、操作非常簡(jiǎn)單,用戶不用花費(fèi)太多的時(shí)間去學(xué)習(xí),所以很容易被用戶接受。所以,從操作可行性來(lái)看,該下載工具也是相當(dāng)可行的。4.3 業(yè)務(wù)流分析多線程下載工具的業(yè)務(wù)流程是:用戶需要

46、下載信息時(shí),首先需要登錄下載系統(tǒng),然后在新建的任務(wù)列表中填寫與下載資源有,關(guān)的下載信息,例如:資源的URL地址,資源的存儲(chǔ)路徑,以及下載任務(wù)所需的線程數(shù)等。填寫好信息時(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ì)5.1 整體設(shè)計(jì)隨著計(jì)算機(jī)的發(fā)展,人們獲取資源的途徑逐漸轉(zhuǎn)移到計(jì)算機(jī),大部分人們都喜歡從網(wǎng)上尋找想要的信息。而且,人們對(duì)資源需求加大的同時(shí),對(duì)

47、下載的需求也增大。人們往往喜歡一次性把資源加入下載列表,這樣下載是花費(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多線程下載的開發(fā)。5.2 模塊劃分本系統(tǒng)可以劃分為以下3大模塊:1.下載任務(wù)模塊對(duì)下載任務(wù)的url資源進(jìn)行定位,并開啟線程將資源輸出流寫入到本地計(jì)算機(jī)下載文檔中對(duì)應(yīng)文件的固定位置。2.線程啟動(dòng)模塊對(duì)下載

48、任務(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),用戶易于操作,用戶容易掌握。用戶界面的功能圖見圖5.1所示。用戶界面按鈕工具條添加下載任務(wù)主窗口屬性面板圖5.1 用戶界面功能圖用戶在下載資源時(shí),可以將任務(wù)分為以下幾部分:開始時(shí),要新建下載任務(wù),開始下載任務(wù),中途可以暫停下載任務(wù),刪除下載任務(wù),打開文件目錄,獲取下載源文件消息,判斷獲取的URL地址是否是有效

49、的等功能。5.3 數(shù)據(jù)下載流程用戶調(diào)度多線程下載全部線程運(yùn)行是否生成下載文件結(jié)束圖5.2 多線程下載數(shù)據(jù)流程圖見圖5.2所示,描述了該下載工具的整個(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é)束了。5.4 關(guān)鍵技術(shù)1HttpURL

50、Connection HttpURLConnect類通過(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&quo

51、t;,"startps" ,"endpas")可以從不同位置對(duì)web資源進(jìn)行請(qǐng)求的特點(diǎn),將資源分拆,并通過(guò)多線程技術(shù),每個(gè)線程對(duì)資源的一部分進(jìn)行下載,實(shí)習(xí)多線程下載。2.RandomAccessFile RandomAccessFile用來(lái)訪問(wèn)文件,用seek( )方法來(lái)訪問(wèn)文件位置,并進(jìn)行讀寫。這些記錄的大小不必相同;但是其大小和位置必須是可知的。但是該類僅限于操作文件。 RandomAccessFile不屬于InputStream和OutputStream類系的,不使用InputStream和OutputStream類中的方法;是一個(gè)完全獨(dú)立的類,所

52、有方法從零開始寫??偠灾?,它是一個(gè)直接繼承于Object的類。 RandomAccessFile的工作方式是把DataInputStream和DataOutputStream相結(jié)合,然后使用自己的方法,它不支持只寫文件。本程序利用其特性,將由HttpURLConnection的每一個(gè)線程所下載的資源作為一個(gè)文件的一部分,最終,當(dāng)下載完成后,可以完好的保持資源的完整性。5.5 基本操作基本操作是在程序中頻繁使用的一些操作,這些操作可能會(huì)被執(zhí)行幾十甚至幾百次,當(dāng)這些操作被調(diào)用的時(shí)候,為了方便先做簡(jiǎn)要說(shuō)明。下載管理的主要操作有以下幾方面:1. Socket操作(1) 創(chuàng)建一個(gè)Socket套接字;(

53、2) 綁定一個(gè)Socket套接字;(3) 打開一個(gè)Socket套接字;(4) 關(guān)閉一個(gè)Socket套接字;(5) 通過(guò)Socket套接字發(fā)送數(shù)據(jù);(6) 從Socket接收數(shù)據(jù)。2HTTP連接(1) 創(chuàng)建一個(gè)HTTP連接;(2) 打開一個(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) 打開文件;(3) 關(guān)閉文件;(4) 管理多線程的同步請(qǐng)求。4下載管理(1) 管理多線程的并行下載;(2) 持續(xù)跟蹤下載處理中的每個(gè)線程。6 多線程下載工具的實(shí)現(xiàn)6.1 下載任務(wù)模塊 1通過(guò)繼承Thread實(shí)現(xiàn)

54、線程,實(shí)現(xiàn)構(gòu)造函數(shù)來(lái)初始化下載所需信息public class downthread extends Threadpublic URL url;public HttpURLConnection urlt;public JLabel Jlabel;public long startps;public long endpas;public File file;public long time;public long tim1;public long tim2;public downthread(URL url,long startps,long endpas,File file,JLabel la

55、bel)this.url=url;this.startps=startps;this.endpas=endpas;this.file=file;this.Jlabel=label;2重寫run()函數(shù),實(shí)現(xiàn)對(duì)url資源的定位并取得輸入流public void run()tryurlt=(HttpURLConnection)url.openConnection(); urlt.setRequestProperty("Range","bytes="+ startps + "-" +endpas);InputStream bis=urlt.getInputStream();3.將取得的流寫入文檔對(duì)應(yīng)文件固定位置中 RandomAccessFile fos = new RandomAccessFile(file, "rw"); fos.seek(startps); int i=0; int pa=0; while(pa<(endpas-startps) if(i=bis.read()!=-1) fos.

溫馨提示

  • 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)論