斷點續傳軟體研究論文

斷點續傳軟體研究論文

  在如今的網路應用中,檔案的傳送是重要的功能之一,也是共享的基礎。一些重要的協議像HTTP,FTP等都支援檔案的傳送。尤其是FTP,它的全稱就是“檔案傳送協議”,當初的工程師設計這一協議就是為了解決網路間的檔案傳送問題,而且以其穩定,高速,簡單而一直保持著很大的生命力。作為一個程式設計師,使用這些現有的協議傳送檔案相當簡單,不過,它們只適用於伺服器模式中。這樣,當我們想在點與點之間傳送檔案就不適用了或相當麻煩,有一種大刀小用的意味。所以一款簡單有效,且具備多執行緒斷點續傳的軟體就成為了必要。

  1 引言

  以往我們軟體開發的程式大多是單執行緒的,即一個程式只有一條從頭至尾的執行線索。然而現實世界中的很多過程都具有多條線索同時動作的特性。例如,我們可以一邊看電視,一邊活動胳膊,如果不容許這樣做,我們會感覺很難受。再如一個網路伺服器可能需要同時處理多個客戶機的請求等。C++語言的一大特性就是內建對多執行緒的支援。多執行緒是指同時存在幾個執行體,按幾條不同的執行線索共同工作的情況,它使得程式設計人員可以很方便地開發出具有多執行緒功能、能同時處理多個任務的功能強大的應用程式。自從“多執行緒下載”技術發明以來,這項技術得到前所未有的關注已是不爭的事實。在“網路螞蟻”軟體流行開後,許多下載軟體也都紛紛效仿,是否具有“多執行緒下載”技術、甚至能支援多少個下載執行緒都成了人們評測下載軟體的要素。“多執行緒下載”的基礎是WEB伺服器支援遠端的隨機讀取,也即支援“斷點續傳”。這樣,在下載時可以把檔案分成若干部分,每一部分建立一個下載執行緒進行下載。

  2 系統開發的目的

  多執行緒和傳統的單執行緒在程式設計上最大的區別在於,由於各個執行緒的控制流彼此獨立,使得各個執行緒之間的程式碼是亂序執行,由此帶來的執行緒排程問題。由於是多執行緒進行斷點續傳,還要考慮記錄多個斷點位置,且記錄斷點位置時也要考慮同步互斥等問題。所有這些都使得這一步比較複雜。但是可以明顯提高網路檔案的下載速度。現在,不要說編寫專門的下載軟體,在自己編寫的軟體中,加入下載功能有時也非常必要。如讓自己的軟體支援自動線上升級,或者在軟體中自動下載新的資料進行資料更新,這都是很有用、而且很實用的功能。

  3 可行性分析

  下載程式功能模組的實現主要利用了面向物件的c++高階程式語言。

  多執行緒程式設計技術是c++語言的重要特點。多執行緒程式設計的含義是將程式任務分成幾個並行的'子任務。特別是在網路程式設計中,有很多功能是可以併發執行的。

  C++中實現多執行緒的類有兩種方法:1.擴充套件Thread類,CreateThread建立執行緒用它覆蓋Thread類的run方法。2. CFile 檔案讀取,生成實現Runnable介面的類並將其它的例項與Thread例項相關聯。

  Thread類是負責向其它類提供執行緒支援的最主要的類,要使用一個類具有執行緒功能,在C++中只要簡單地從Thread類派生一個子類就可以了。

  下載程式的具備友好的使用者介面,而且操作簡單易於被使用者接收,使用此下載程式十分方便,因為軟體的操作思路比較清晰,而且使用者實際操作的內容較少,所以使用者只需要熟練操作計算機即可。因此從使用操作方面看,此係統得開發是可行的

  4 使用者需求分析

  隨著Internet的發展,進入資訊時代後快速獲得網路共享資源成為很簡單的事情,人們對網際網路也有了很大的依賴性。人們甚至希望只輕鬆點選滑鼠就可以得到自己想要的東西。比如,針對一些專業的論壇提供了很多相關資料以方便人們閱讀或瞭解;還有更多的人希望能過下載到他們喜歡聽得音樂、好看的圖片、喜歡的電影等等。也可以看出人們在上網時再也不單是開啟瀏覽器來瀏覽網頁,越來越多的人們開始使用下載軟體來獲取資源。同時人們也更希望使用更新更快的下載軟體。

  由於使用者下載需求的增大,也要求下載軟體能夠迅速完成對資源的下載。多執行緒程式設計可以很好的解決程式併發的問題。最恰當的比喻就是使用者會感到CPU似乎同時出現在兩個地方,在下載軟體中應用多執行緒技術可以理解為將一個下載任務分成若干份來完成,其中的併發控制將使下載的效率大大提高。

  在下載任務的管理這一塊,使用者不僅希望下載工具具有下載一個一個資源的功能,而且具有批次下載有些相似的或有關聯的資源的功能。還有些特殊情況下,使用者在下載任務開始後由於種種原因希望放棄資源的下載,這就要求下載工具具有刪除任務的功能了。

  為了對下載任務進行掌控,使用者往往具有設定下載任務的執行緒數,檔案下載網址,檔案下載儲存目錄和在下載過程中對下載任務的狀態進行監控等功能需求。

  鑑於某些軟體使用初學者甚至某些電腦初學者的實際情況,他們往往需要系統有一個格外的幫助文件,使他們能夠更快、更好地學會使用斷點續傳下載軟體,提高效率。

  5 系統設計要點

  隨著使用者下載需求的增大,使用者下載的資源越來越大,下載的過程也就越來越久,這就要求下載軟體能夠迅速完成對資源的下載,為了提高下載效率的問題,所以本系統採用多執行緒的方式來實現下載速率的提高。多執行緒的優點之一是所有執行緒都可以訪問相同的全域性變數和共享資源,它提供了程式設計的簡捷性與便利性,提高了對資訊處理的併發度,但也帶來了資料的訛誤或執行緒得不到某一資源而被餓死(即死鎖)的可能性。為了避免這些現象的產生,執行緒在使用共享資源或物件前必須獲得一個約束訪問同步物件的權力,也就是透過同步的機制來控制這種權力的使用,這就是執行緒的安全問題。長期以來,斷點續傳始終是困擾網蟲們的一大難題,眼看著已經下載到99%的軟體,卻由於突然掉線而前功盡棄的那種沮喪恐怕人人都經歷過,於是本系統採用斷點續傳的方式來設計。

  本系統設計的基本目標就是利用編寫一個時下流行的多執行緒斷點續傳的程式來研究C++多執行緒與執行緒安全的機制。

  6 功能需求

  一部分是伺服器的應用程式,主要用於接受客戶端的連線請求,處理客戶的請求,向客戶傳送結果和應答資訊等;一部分是客戶端的應用程式,主要用於申請連線伺服器,向伺服器傳送請求和處理伺服器返回的結果等。

  伺服器的啟動、客戶端的連線和訊息通訊:

  伺服器端必須能夠做3件事情:

  (1)伺服器要在特定的埠上等待來自聊天客戶的連線請求,並且需要維護一個客戶連線表,以記錄所有成功的連線。

  (2)伺服器要及時新增共享的檔案目錄,從而供客戶端下載

  (3)伺服器還要具有與客戶端通訊的能力。

  資訊通訊

  客戶端聊天程式需要完成以下5個功能:

  (1)客戶端聊天程式要負責建立和維護與伺服器的連線,透過獲取使用者的設定嘗試與伺服器的連線,並且隨時檢測連線的狀態。

  (2)客戶端聊天程式要把使用者輸入的資訊及時傳送到聊天伺服器。一般情況下,當用戶輸入一行資訊並且按下回車鍵之後聊天程式就要把這一行資訊傳送出去,才能及時地滿足使用者的互動需求。

  (3)客戶端聊天程式要隨時準備好接收來自伺服器的資訊,隨時把接收到的資訊顯示出來,讓使用者及時看到對方的響應。

  (4)在使用者退出聊天過程時要關閉與伺服器的連線。比較好的做法是提前通知伺服器,或者直接給伺服器傳送一條退出通知,使得伺服器能夠及時掌握客戶端的連線狀態,把對方客戶的退出資訊及時傳送到對等實體上。

  (5)客戶端與服務哭端連線成功後必須知道伺服器端的共享資訊,以便自己可以有選擇的進行下載。

最近訪問