基于SOCKET的多線程下載工具的開發(fā)_第1頁
基于SOCKET的多線程下載工具的開發(fā)_第2頁
基于SOCKET的多線程下載工具的開發(fā)_第3頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、2011 年 8 月第 8 期電子測試electronic testaug.2011no.8104基于 socket 的多線程下載工具的開發(fā)周學威,閆鑫,趙櫸云,楊薇 (中北大學 儀器科學與動態(tài)測試教育部重點實驗室,山西 太原 030051 )摘要: 在 windows 編程中,為了提高代碼的時、空效率,廣泛采取多線程技術。本文以多線程技術的應用為研究背景,實現了多線程的一個應用: 多線程文件下載。該下載工具以vc+6.0為開發(fā)平臺,利用windows 套接字函數進行網絡編程,實現了基于http 協議的文件下載過程,并通過創(chuàng)建和編寫線程函數實現了文件的多線程下載工具的開發(fā)。利用該下載工具可以對

2、網上的文檔、圖片、歌曲等各種文件實現多線程下載。經測試表明,該下載工具使文件的下載速率得到了有效提高。關鍵詞: 多線程;http協議; windows 套接字函數中圖分類號: tn915.85 文獻標識碼: adevelopment of multi-thread downlodeing tool based on socketzhou xuewei, yan xin, zhao juyun, yang wei(key laboratory of instrumentation science & dynamic measurement (north university of chi

3、na), ministry of education, taiyuan 030051, china)abstract : in order to improve codes efficiency both in time and space, multi-thread technology widely used on windows programs. this thesiss background was the apply of the multithreading technology, realize an application of multithreading technolo

4、gy: the multi-thread download file . this tool used vc+6.0 as the development space and windows socket function to finish the process, realizing the file download based on hyper text transfer protocal, and by creating and writing thread function realize the file multi-thread downloading tools develo

5、pment.to avail these multithreading download instrument could download the different kinds of file by multithreading in net, such as the documents 、pictures、songs and so on .the test shows that the download tools make file download speed effectively improved.keywords : multi-thread; hyper text trans

6、fer protocal; windows socket function0 引言多線程就是允許單個程序創(chuàng)建多個并行執(zhí)行的線程來完成各自的任務,它在多任務和實時處理等方面具有重要意義,特別是在網絡應用程序中,可以提高帶寬利用率和程序反應速度1。為了達到下載大型網站的目的, 在編寫離線瀏覽軟件的過程中,需要下載大量的web 文件,其中一個技術要點就是多線程下載問題。是否具有“多線程下載”技術、甚至能支持多少個下載線程都成了人們評測下載軟件的要素2。本文以 socket 技術為依托,基于vc+6.0環(huán)境,采用http 協議,通過編寫客戶端應用程序,對文件的多線程下載進行了設計與實現。1 設計思路多

7、線程下載的前提是網絡的連通和通信軟件與協議應用技巧與實踐1052011.8的應用。下載文件的過程是客戶端與服務器的交互的過程,在下載過程中采用的傳送文件的協議有多種,本程序的設計采用了 http 協議3。http 即超文本傳輸協議,當客戶端與服務器建立一個 tcp 連接后,客戶端就可以發(fā)送請求并讀取服務器的消息響應。在網絡通信環(huán)境下,socket作為應用程序和網絡之間的標準接口,可以看成在兩個程序進行通訊連接中的一個端點,是連接應用程序和網絡驅動程序的橋梁4。mfc 是 vc 編程環(huán)境最重要的組成部分,它為用戶提供了一大批預先定義的類和成員函數,封裝了大量的windows api5。為了簡化套

8、接字網絡編程,更方便的利用windows 系統的消息驅動機制,充分利用mfc 的優(yōu)勢,本設計采用基于 mfc 對話框的架構。由于本設計基于http 協議,采用 mfc winsock 中的csocket套接字類進行編程,由客戶端直接發(fā)送請求到服務器端進行資源的下載,因此只需編寫客戶端網絡應用程序6。首先,根據http 協議,構造請求消息頭,向web服務器發(fā)送資源下載請求,當服務器返回請求成功后,再分別為每個線程構造下載請求,通過csocket編程向服務器傳輸請求,實現各個線程的下載;然后,啟動線程函數,包括四個下載線程用以實現多線程下載和一個監(jiān)聽線程來實時記錄下載狀態(tài);最后當各個下載線程都結束

9、時,進行文件合并,同時刪除臨時文件以完成下載任務7。2 具體實現及主要函數2.1 函數實現過程實現過程可概括為:利用 socket套接字發(fā)送消息,在發(fā)送的消息中要構造請求消息字段,用http 協議向服務器發(fā)送下載請求,通過服務器的返回指令,實現資源下載,并通過啟動線程函數來加入多線程技術,從而實現數據的多線程下載。其函數調用過程如圖1所示。要實現下載,必須由客戶端向服務器發(fā)送請求消息,這是 http 的核心。如圖1 所示,開始下載后,首先要獲得要下載文件的url,接著調用parseurl函數判斷要下載文件的 url 是否合理,若合理,則會由sendrequest() 函數向主線程發(fā)送http

10、請求消息,在調用getinfo 函數獲取http 服務器成功響應的消息后,會為每個下載線程分配要下載的字節(jié)數。這樣,開始下載任務成功實現后,會調用 cdownloaddlg 類中的 createthread() 函數中,創(chuàng)建線程,downloadthread (lpvoid lpparam)是新建線程的入口函數,threadfunc(index)函數主要進行下載過程中每個子線程的套接字編程,通過編寫向服務器發(fā)送請求消息的標題字段的代碼,利用 http 協議的下載原理實現每個子線程的下載。2.2 主要函數說明( 1)創(chuàng)建下載線程,指向downloadthread()這個線程函數的入口 :m_ht

11、hreadi=:createthread(null, 0, downloadthread, (lpvoid)&http, 0, &dwthread);( 2)創(chuàng)建監(jiān)聽線程,指向監(jiān)聽線程 notify() 函數的入口,用以對各線程的下載狀態(tài)和進度進行監(jiān)聽:m_hnotify=:createthread(null,0,notify,(lpvoid)this,0,&dwnotify); ( 3) downloadthread() 函數 :dword winapi downloadthread(lpvoid lpparam); 該函數會通過公有的繼承方式繼承threadfunc

12、(index)函數, threadfunc(index) 函數實現的主要功能是 :每個子線程向服務器發(fā)送http 請求消息,實現每個子線程下載任務的完成。( 4) notify()函數dword winapi notify(lpvoid lpparam);該函數中,會通過公有的繼承方式繼承在類cdownloaddlg 中的finish() 函數,判斷每個子線程是否完成下載,并進行下載文件的保存。 ( 5) threadfunc() 函數在 threadfunc函數中,先要創(chuàng)建客戶端的套接字對象,圖1 多線程下載的函數調用過程消息響應函數 onstart()parseurl(cstring st

13、r)sendrequest(bool bhead=false)getinfo(lpctstr lpsaheader, dword &dwcontenlength,ctime & timelastmodified)createthread()notify(lpvoid lpparam)finish()threadfunc(index)downloadthread(lpvoid lpparam)skill & practice1062011.8對每個要下載的子線程,設置了http 會話中的請求消息字段,通過由客戶端向服務器發(fā)送請求消息實現每個子線程的下載。對于多線程下載,在

14、請求消息的標題字段增加了 range,用于請求服務器返回指定大小的字段,其大小采用了數據分片技術來確定8。編寫的語句為strrange.format(range: bytes=%d-%drn, m_state.range2 * index, m_state.range2 * index + 1), 其中 index是線程的序列號。3 系統運行程序設計完成后,編譯并運行,在生成對話框后,選擇要下載文件的url,將其直接拖入getlist 列表控件中,點擊開始按鈕,開始下載。下載過程如圖2 所示,可見4個線程同步運行,實現了4 個線程下載同一文件的多線程下載 ;下載完成時,彈出提示窗口提示“多線程

15、下載完成”,如圖 3 所示。此時單擊提示窗口中的“確定”按鈕, 4 個 .jpg臨時文件將合并成一個jpeg圖像,至此便完成了多線程文件的下載。 圖2 正在下載界面 圖3 下載完成界面4 結束語本文對多線程數據傳輸進行了詳細分析和總體設計,對多線程下載的原理、具體實現和應用進行了探討,采用了面向對象的設計方法,應用多線程技術,通過windows套接字函數,直接向web 服務器發(fā)送請求,用vc+6.0 mfc 中的 csocket類編寫客戶端程序,實現了基于超文本傳輸協議 http 的文件下載,通過創(chuàng)建和編寫線程函數實現了多線程傳輸,經測試,下載速度有一定的改善。參考文獻1 鄭阿奇.visual c+ 實用教程m.3 版 . 北京 : 電子工業(yè)出版社,2008.2 毛光喜 . 多線程下載工具的開發(fā)與應用j. 計算機應用與軟件,2006,23(7):136-138.3 charles wright. visualc+程序員使用大全m. 鄧勁生 , 張曉明 譯 .北京 : 中國水利水電出版社,2001.4 蔣東興.windowssockets 網絡程序設計大全m. 北京 : 清華大學出版

溫馨提示

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

評論

0/150

提交評論