【正文】
lest unit of execution flow. Thread can be simple to understand as a download channel. So, single thread is to download with a single download channel, and downloading with multithread is to download with a lot of download channel at the same time. When a user selects a multithread download, download device will download resources according to the number of threads . Then download resources to local place at the same time. Obviously Multithread take a higher CPU utilization than single thread, so it can improve download speed. HTTP namely hypertext transfer protocol, it is a kind of detailed munication regulations between the world wide web server and browser, it is a data transfer protocol which can through the Inter transmitting the world wide web document transmission. HTTP is a mon work protocol. If you want to get to the Inter, the most basic is to follow the HTTP protocol. I use java program development language and eclipse development tool in my graduation design. This subject mainly introduces the principle and method to realize the multithread download process and break point transmission under HTTP work environment .It can help users to have a deeper understanding about downloader and how to use download tools better. Keywords: HTTP。 HTTP 是 Hyper Text Transportation Protocol(超文本傳輸協(xié)議 )的縮寫,它是計算機(jī)之間交換數(shù)據(jù)的方式,原理非常簡單,就是用某種規(guī)則(協(xié)議)和提供文件的服務(wù)器取得聯(lián)系并將文件搬到自己的計算機(jī)中來,從而實現(xiàn)下載的功能。由于在網(wǎng)絡(luò)環(huán)境下,用戶對于下載器速度的要求很高。我們?nèi)绾潍@取這些共享的網(wǎng)絡(luò)數(shù)據(jù)就要用到各種網(wǎng)絡(luò)資源下載器。 本論文具體章節(jié)安排如下: 第一章,引言。 第三章,系統(tǒng)分析。 第五章,結(jié)論,對本文聚焦的問題進(jìn)行總結(jié)。 MSIE 。 charset=GB2312 附:響應(yīng)狀態(tài)碼的具體描述: 1xx信息提示 這些狀態(tài)代碼表示臨時的響應(yīng)。 2xx成功 這類狀態(tài)代碼表明服務(wù)器成功地接受了客戶端請求。 202已接受。 湖南科技大學(xué)本科生畢業(yè)設(shè)計(論文) 7 206部分內(nèi)容。 302對象已臨時移動。例如,客戶端請求不存在的頁面,客戶端未提供有效的身份驗證信息。這些具體的錯誤代碼在瀏覽器中顯示,但不在 IIS 日志中顯示。 505HTTP 版本不受支持。 Swing 簡介 Swing 是一個用于開發(fā) Java 應(yīng)用程序用戶界面的開發(fā)工具包。 Swing 組件的類體系結(jié)構(gòu)如圖 所示: 圖 Swing 組件體系結(jié)構(gòu) 圖 創(chuàng)建圖形界面的步驟: 導(dǎo)入 Swing 包 選擇界面風(fēng)格 設(shè)置頂層容器 設(shè)置按鈕和標(biāo)簽 將組件放到容器上 為組件增加邊框 處理事件 、 輔助技術(shù)支持 線程和多線程 線程的基本概念 線程( thread)是 進(jìn)程 中某個單一順序的控制流。一個標(biāo)準(zhǔn)的線程由線程 ID,當(dāng)前指令指針 (PC),寄存器集合和堆棧湖南科技大學(xué)本科生畢業(yè)設(shè)計(論文) 9 組成。線程也有就緒、阻塞和運(yùn)行三種基本狀態(tài)。 多線程的優(yōu)點(diǎn) CPU 是以時間片的方式為進(jìn)程分配 CPU 處理時間的,當(dāng)一個進(jìn)程以同步的方式去完成幾件事情時,此進(jìn)程必須完成了第一件事情以后再做第二件事,如此按順序地向 CPU 請求完成要做的事情。多線程在處理一些特殊的場合其優(yōu)勢更加明顯(如下載器)。在下載軟件中應(yīng)用多線程技術(shù)可以理解為將一個下載任務(wù)分成若干份來完成,其中的并發(fā)控制將使下載的效率大大提高。斷點(diǎn)續(xù)傳就很好的解決了這樣的問題,它的任務(wù)是在下載任務(wù)停止時,記錄當(dāng)前下載的信息并且利用網(wǎng)絡(luò)協(xié)議中的一些重定向機(jī)制繼續(xù)完成下載任務(wù)而不必從頭再來。 NewDownload: 創(chuàng)建新建下載的頁面,定義新建下載頁面的監(jiān)聽事件。 其中每個類可以看做是一個功能模塊。系統(tǒng)結(jié)構(gòu)用例圖如圖 所示: 圖 系統(tǒng)結(jié)構(gòu)用例 圖湖南科技大學(xué)本科生畢業(yè)設(shè)計(論文) 13 第四章 系統(tǒng)實現(xiàn) 開發(fā)環(huán)境構(gòu)建 開發(fā)應(yīng)用程序所需要的環(huán)境: : Windows 或 Linux 系統(tǒng)。 JDK 和 Eclipse 的安裝 第一步:安裝 Java 安裝完成 jdk 以后最重要的是配置環(huán)境變量: 在 ―我的電腦 ‖上點(diǎn)右鍵 —―屬性 ‖—―高級 ‖— ―環(huán)境變量 (N)‖; 在 “系統(tǒng)變量 ”中,設(shè)置 3 項屬性, JAVA_HOME,PATH,CLASSPATH(大小寫無所謂 ),若已存在則點(diǎn)擊 “編輯 ”,不存在則點(diǎn)擊 “新建 ”。% JAVA_HOME%\lib。 MainFrame 模塊設(shè)計 MainFrame 模塊結(jié)構(gòu) MainFrame 模塊是界面和按鈕監(jiān)聽事件的集合,用戶每按一個按鈕系統(tǒng)就會執(zhí)行不同的事件。//1280*800 (this)。 //創(chuàng)建各個按鈕并設(shè)置按鈕的名字 new_btn=new JButton(新建下載 )。 //定義 table table=new JTable()。 //設(shè)置進(jìn)度條 scrollPane = new JScrollPane(table)。 (del_btn)。 } 湖南科技大學(xué)本科生畢業(yè)設(shè)計(論文) 17 主界面實現(xiàn)了下載進(jìn)度條,我們需要設(shè)定進(jìn)度條外觀的各種屬性,關(guān)鍵代碼如下: public Component getTableCellRendererComponent(JTable table, Object value,boolean isSelected, boolean hasFocus, int row, int column) { //將進(jìn)度條中不斷變化的值強(qiáng)制轉(zhuǎn)換為 int型 (((())))。 // 設(shè)置進(jìn)度條的顏色為藍(lán)色 //該屬性確定進(jìn)度條是否應(yīng)該呈現(xiàn)進(jìn)度字符串 (true)。 點(diǎn)擊新建下載按鈕:下載器要彈出新建下載框; 點(diǎn)擊暫停下載按鈕:將選中的下載條目暫停; 點(diǎn)擊開始下載按鈕:將選中的下載條目重新開始下載; 點(diǎn)擊刪除下載按鈕:將選中的下載條目刪除,放入垃圾箱; 關(guān)鍵代碼如下: private void addListener(){ //新建下載監(jiān)聽事件 (new ActionListener() { public void actionPerformed(ActionEvent e) { addNewDownload()。irow。//得到所有下載條目個數(shù) for(int i=0。 //刪除下載監(jiān)聽事件 (new ActionListener() { public void actionPerformed(ActionEvent e) { int row=()。 (i)。 //全局 MainFrame public static DownTableModel globaltable。 //設(shè)定列名數(shù)組 private ArrayListObject[] tabledata = new ArrayListObject[]()。 public DownTableModel(JTable table) { //構(gòu)造函數(shù) = table。 } //得到表格某個具體單元格的值 public Object getValueAt(int rowIndex, int columnIndex) { return (rowIndex)[columnIndex]。 (obj)。 } } 刪除一個下載項目我們只需要了解刪除條目的行數(shù)( row值),刪除一個下載條目的關(guān)鍵代碼如下: public boolean removeRow(int row){ (row)。 } 當(dāng)啟動一個下載任務(wù),系統(tǒng)必須給表格動態(tài)的設(shè)定一些列的值。 //得到文件實際大?。?KB) float temp=(int)(size*100)。 } (i)[2]=strsize。關(guān)鍵代碼如下: public void downOver(Download download) { for (int i = 0。 //從 table中移除該行 //從全局界面的 download集合中移除該下載對象 Download down=(i)。用戶首先需要 URL 地址,輸入 URL 地址后,系統(tǒng)會進(jìn)行判斷此 URL 地址是否合法,若不合法則要求用戶重新輸入新的 URL,輸入 URL 后系統(tǒng)會自動生成一個文件名,填充在保存文件名的文本框中。若用戶點(diǎn)擊確定按鈕,則下載該資源,并回到主界面;若用戶點(diǎn)擊取消按鈕,則取 消下載該資源,同樣最后會回到主界面。i 20。 ()。 (20,20,58,30)。 湖南科技大學(xué)本科生畢業(yè)設(shè)計(論文) 24 (125, 98, 300, 30)。 (88, 55, 400,30)。 (350, 200, 70, 30)。 (new Cancel_AND_Sure_Lisener())。 點(diǎn)擊瀏覽按鈕:系統(tǒng)自動彈出文件保存位置選擇框; 點(diǎn)擊確定按鈕:創(chuàng)建下載實體,回到主界面; 點(diǎn)擊取消按鈕:取消下載,回到主界面; 關(guān)鍵代碼如下: 在文本框中輸入 url后,可自動在保存文件名的框中輸入文件名; 關(guān)鍵代碼如下: //監(jiān)聽 確定 , 取消 按鈕 class Cancel_AND_Sure_Lisener implements ActionListener{ 湖南科技大學(xué)本科生畢業(yè)設(shè)計(論文) 25 public void actionPerformed(ActionEvent e) { if(取 消 .equals(().trim())){ //點(diǎn)擊取消按鈕 ()。 } } else{ (, 地址不能為空 )。 } } } } Download 模塊的設(shè)計 Download 模塊主要包含如下幾個子模塊: 獲得下載連接和選擇下載模式(單線程或多線程)、創(chuàng)建下載線程和分配每個線程下載塊的大小、啟動線程下載、計算每個線程已下載的大小和獲取已經(jīng)完成的線程的數(shù)量。當(dāng)采用多線程下載模式,我們首先要生成若干個線程,線程個數(shù)與用戶在新建下載對話框選擇的下載個數(shù)一致;然后將資源分成若干個塊,每個線程負(fù)責(zé)下載一塊。關(guān)鍵代碼如下: try { URLConnection openCon=()。//獲得資源大小 =()。 RandomAccessFile rand=null。//啟動線程 setStatus()。 } } 創(chuàng)建線程并分配每個線程下載塊:根據(jù)用戶選定的下載線程數(shù)創(chuàng)建等量的下載線程并分配每個線程下載塊的大小。i。 }else{ //分配每個線程的下載起始點(diǎn)和結(jié)束點(diǎn) [i]=new DownloadThread(this, i, i*dataLen, i*dataLen+dataLen,ran_i)。i++){ //調(diào)用線程的 start 方法啟動下載 new T