夏雪剛
"""摘要:針對網(wǎng)絡(luò)應(yīng)用中需要可靠、高效的文件傳輸問題,通過對多線程技術(shù)和斷點續(xù)傳技術(shù)的工作原理及實現(xiàn)機(jī)制研究分析,引入了C#中類的方法進(jìn)行程序優(yōu)化,減少了編程代碼,提高了編程和執(zhí)行效率。通過在C#環(huán)境下進(jìn)行編程仿真分析,實驗結(jié)果表明創(chuàng)建適當(dāng)線程數(shù)的多線程斷點續(xù)傳技術(shù)能有效利用系統(tǒng)資源、提高文件傳輸?shù)目煽啃?、高效性等方面有其明顯的優(yōu)勢。
關(guān)鍵詞:多線程;斷點續(xù)傳;文件傳輸
中圖分類號:TP393 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2016)21-0048-03
很多網(wǎng)絡(luò)應(yīng)用軟件,需要從服務(wù)器下載數(shù)據(jù),需要高效的技術(shù)提高網(wǎng)絡(luò)下載速度,提高工作效率,但數(shù)據(jù)傳輸過程中因為網(wǎng)絡(luò)中斷、計算機(jī)死機(jī)重啟、掉電而中斷文件傳輸不可避免,為應(yīng)對這些突發(fā)事件,實現(xiàn)用戶重新上線時在上一次下載的基礎(chǔ)上繼續(xù)下載文件資源。需要開發(fā)高效的多線程下載客戶端模塊,負(fù)責(zé)線程的管理,進(jìn)度的記錄等,可以充分利用網(wǎng)絡(luò)帶寬實現(xiàn)文件的快速、穩(wěn)定、高效傳輸。多線程網(wǎng)絡(luò)資源傳輸技術(shù)和斷點續(xù)傳技術(shù)是提高資源下載效率的關(guān)鍵技術(shù)。
1 多線程下載技術(shù)和斷點續(xù)傳技術(shù)
1.1 多線程下載基本原理
多線程下載技術(shù)是獲取到的文件的大小, 根據(jù)文件大小將該文件分塊, 每個線程負(fù)責(zé)其中一塊文件塊的傳輸工作[1-2]。服務(wù)器允許同一個用戶與之建立多個連接, 并為每個連接分配一個線程, 客戶端通過與服務(wù)器建立多個連接可以獲得服務(wù)器更多的服務(wù)時間, 特別是在有其他用戶與服務(wù)器建立連接的情況下, 利用多線程技術(shù)可以在與其他用戶在競爭服務(wù)器服務(wù)時間上更有優(yōu)勢[3]。
1.2 多線程文件客戶端傳輸過程
1)客戶端與服務(wù)器的連接。
在進(jìn)行文件傳輸之前,客戶端與服務(wù)器必須建立好連接。并構(gòu)造和發(fā)送固定格式的信息頭請求,然后等待接收服務(wù)器的響應(yīng)信息,包括重定向,如果失敗或成功就退出。
2)客戶端取得待下載文件信息。
在發(fā)送請求后,獲取文件名稱,文件存儲位置和文件大小等有關(guān)信息。
3)客戶端創(chuàng)建多個線程,進(jìn)行文件分塊。
取得文件信息后,創(chuàng)建多個線程,按照線程數(shù)將文件分割成合適的數(shù)據(jù)塊,確定每個數(shù)據(jù)塊的起點和大小[4]。為每一個文件塊分配一個線程,如果有thread個線程傳輸filesize大小的文件,那么每個線程負(fù)責(zé)傳送filesize/thread個字節(jié),當(dāng)不能整除時,最后一個線程再負(fù)責(zé)剩余部分字節(jié),也就是負(fù)責(zé)filethread +filesize % thread字節(jié)數(shù)據(jù)傳輸。
4)進(jìn)行多線程并行下載。
5)各線程文件塊下載完成,組合成完整的文件。
多線程文件下載的流程如下圖:
1.3 斷點續(xù)傳實現(xiàn)機(jī)制
斷點續(xù)傳實質(zhì)是記錄線程上一次下載斷開的位置,并在下一次建立連接后直接從上次傳輸中斷的位置繼續(xù)傳輸。斷點續(xù)傳的關(guān)鍵問題有兩點:
1)傳輸中斷時,記錄斷點,保存本地的下載信息,需要建立臨時文件來保存本地下載信息,多線程下載信息包含各線程已下載字節(jié)數(shù),文件的指針和文件的大小等信息[5]。當(dāng)傳輸中斷時,多個線程斷點下載信息會記錄在臨時文件中,并將文件指針指向已下載文件的末尾。
2)續(xù)傳,指任務(wù)恢復(fù)連接后,系統(tǒng)檢查本地下載信息,首先判斷本地是否存在所下載的文件,如果存在,讀取已下載文件的下載信息,系統(tǒng)會根據(jù)記錄的斷點位置,自動將指針定位在未完成線程的斷點位置,自動從斷點處傳輸每個線程的剩余部分的數(shù)據(jù),這需要在客戶端向服務(wù)器發(fā)送請求。
斷點續(xù)傳實現(xiàn)流程如下圖:
2 支持?jǐn)帱c續(xù)傳的多線程程序仿真
這里使用C#實現(xiàn)支持?jǐn)帱c續(xù)傳功能的多線程客戶端下載模塊開發(fā)仿真。在開發(fā)過程中用到了C#中的HttpWebRequest和HttpWebResponse類,客戶端首先通過HttpWebRequest.Create()創(chuàng)建下載鏈接,通過GetResponse().ContentLength取得服務(wù)器上文件的長度,然后初始多個數(shù)組存儲各線程狀態(tài),文件名、起始和結(jié)束位置信息等。然后劃分線程,平分?jǐn)?shù)據(jù)塊,將剩余部分劃分到最后一個線程中,定義線程數(shù)組,啟動接收線程,使用HttpWebResponse的GetResponseStream()方法,從服務(wù)器上返回數(shù)據(jù)流。通過調(diào)用自定義函數(shù)ReceiveFile()接收和處理每個線程。
使用自定義函數(shù)ReceiveFile()處理每個線程下載任務(wù),并實現(xiàn)斷點續(xù)傳。在其中使用System.IO.file類用于典型的文件操作,用于獲取和設(shè)置文件特性或有關(guān)文件創(chuàng)建、訪問及寫入以及斷點續(xù)傳等操作。先使用System.IO.File.Exists()方法判斷下載文件是否存在,如果存在,使用System.IO.File.OpenWrite()方法打開文件,并使用Seek()方法定位斷點位置,如果不存在使用System.IO.FileStream(strFile, System.IO.FileMode.Create)創(chuàng)建流文件,然后開始下載線程文件。
3 測試與分析
測試環(huán)境:
網(wǎng)絡(luò)環(huán)境:移動鐵通寬帶
硬件環(huán)境:計算機(jī)為聯(lián)想昭陽 K46A inter core i5 M480,內(nèi)存4G
軟件環(huán)境:操作系統(tǒng)Windows 7(32位)
軟件名:WPS Office 2016個人版 10.1.0.5740
軟件大小:54857KB
下載連接:http://crcfj.onlinedown.net/down/W.P.S.5559.20.2422.zip
測試方案:
分別創(chuàng)建5個任務(wù),每個任務(wù)線程分別設(shè)置為1、3、5、7、9。設(shè)計的多線程客戶端下載工具下載參數(shù),包括下載用時Tn(秒)、Hn下載速度峰值、下載平均速度1 An、下載平均2 an、瞬時下載速度In-t ,瞬時速度取每個下載任務(wù)周期每隔10秒記錄一次瞬時速度,文件大小S(KB),Pn表示下載任務(wù),其中所有參數(shù)中n表示線程數(shù)。
An =S/Tn,an=()/Tn。
在同一下載文件在不同線程下載任務(wù)下,統(tǒng)計對比各任務(wù)用時,平均速度,速度峰值,并通過線性圖直觀的顯示出。實驗結(jié)果如下表。
從實驗結(jié)果及分析看,任務(wù)下載快慢依次為:P5>P3>P7>P9>P1。平均速度2 an采用瞬時速度加權(quán)求平均,有一定的誤差,其與平均速度1雖然算法不同,但從實驗數(shù)據(jù)和線性圖走向基本一致,說明本實驗合理。單任務(wù)下載最慢,線程數(shù)為5或3,用時最短,速度最快,但并不是線程越多下載速度越快,隨著線程數(shù)增加,速度逐漸降低,但仍比單線程任務(wù)速度要快。
4 結(jié)束語
通過對多線程斷點續(xù)傳技術(shù)的研究,從網(wǎng)絡(luò)下載技術(shù)從原理到實現(xiàn)機(jī)制再到客戶端模塊的仿真、測試。多線程文件下載的確可以較大的提升下載的速度。并且通過C#語言類庫的應(yīng)用,減少了編程代碼,提高了編程和執(zhí)行效率。多線程端點續(xù)傳技術(shù)在文件共享、即時通信、協(xié)同工作、在線考試系統(tǒng)等方面較為廣泛應(yīng)用。
參考文獻(xiàn):
[1] 王健, 鄭偉. 基于Linux 的通用多線程下載工具設(shè)計實現(xiàn)[J]. 微計算機(jī)信息, 2010(26):74-76.
[2] 賈曉芳. 廣播節(jié)目傳輸中的斷點續(xù)傳和多線程技術(shù)運(yùn)用[J]. 無線互聯(lián)科技, 2016(5):6-7.
[3] 姬濤. 基于P2P 網(wǎng)絡(luò)的多線程下載技術(shù)研究[J]. 電腦開發(fā)與應(yīng)用, 2014(7):18-20.
[4] 高芳. 基于多線程的網(wǎng)絡(luò)文件傳輸工具的改進(jìn)[J]. 數(shù)字技術(shù)與應(yīng)用, 2015(4):61-62.
[5] 卞秀運(yùn). 基于Java 的多線程下載工具的研究與實現(xiàn)[J]. 信息通信, 2012(3):151-152.
3.1 遠(yuǎn)程監(jiān)控系統(tǒng)中硬件安全的考慮
硬件安全是所有計算機(jī)設(shè)備都應(yīng)該考慮的問題,但是從軟件系統(tǒng)層面來說無法預(yù)防,因此需要遠(yuǎn)程監(jiān)控系統(tǒng)的實際操作人員注重電磁干擾、設(shè)備保護(hù)等問題,防止數(shù)據(jù)損毀與丟失。
3.2 信息傳輸過程中的安全問題
遠(yuǎn)程監(jiān)控系統(tǒng)需要大量的信息傳輸以保證其正常運(yùn)轉(zhuǎn),在信息傳輸?shù)倪^程中一定要做好安全方面的有關(guān)措施,大部分安全問題也是從這個環(huán)節(jié)滲透進(jìn)去的。保障數(shù)據(jù)的安全傳輸,需要采取良好的數(shù)據(jù)加密技術(shù)。
數(shù)據(jù)加密技術(shù)即使用各種各樣的加密方法對數(shù)據(jù)加密傳輸,在客戶端以及服務(wù)器端的編碼解碼模塊之外獨立地進(jìn)行密碼模塊的編譯。一般常用的數(shù)據(jù)加密算法都有自己獨特的密鑰,這個密鑰要在服務(wù)器端和客戶端之內(nèi)具有同步性,而在其之外則要具有唯一性,而且一個相同的密鑰不能使用連續(xù)超過一段時間,要根據(jù)使用狀況和當(dāng)時的實際情況進(jìn)行密鑰的更換。
另外還要注重總體安全體系在軟件構(gòu)建過程中的地位,一般來說一個完整的安全體系有四個不同的部分:實體安全部分、網(wǎng)絡(luò)安全部分、管理安全部分和應(yīng)用安全部分,其中應(yīng)用安全以及網(wǎng)絡(luò)安全是安全工作的重點,要在防火墻構(gòu)筑的過程中對限制訪問、安全漏洞排查、實時網(wǎng)絡(luò)環(huán)境監(jiān)控和數(shù)據(jù)備份恢復(fù)等功能作為安全體系的重點功能進(jìn)行研發(fā)。
4 結(jié)語
遠(yuǎn)程監(jiān)控系統(tǒng)需要的計算機(jī)軟件支持需要兼顧便捷性和安全性的特征,因此在軟件的研發(fā)階段要從底層架構(gòu)的決定開始對軟件研發(fā)進(jìn)行控制,從而對整體的計算機(jī)遠(yuǎn)程監(jiān)控系統(tǒng)進(jìn)行系統(tǒng)層級的優(yōu)化方案設(shè)計。
參考文獻(xiàn):
[1] 汪娟.基于WEB的工業(yè)遠(yuǎn)程監(jiān)控系統(tǒng)研究與實現(xiàn)[D].武漢理工大學(xué),2008.
[2] 王洪猛.基于Web的遠(yuǎn)程監(jiān)控系統(tǒng)開發(fā)技術(shù)研究[D].武漢大學(xué),2005.
[3] 孟亮.基于軟件復(fù)用技術(shù)的通用遠(yuǎn)程動力監(jiān)控系統(tǒng)研究[D].西北工業(yè)大學(xué),2006.
[4] 李文鑫.基于Internet的遠(yuǎn)程實時監(jiān)控系統(tǒng)研究[D].武漢理工大學(xué),2006.
[5] 羅映冰.基于GPRS技術(shù)的計算機(jī)遠(yuǎn)程監(jiān)控系統(tǒng)的研究與實現(xiàn)[J].中國科技信息,2010(2):96-97.
[6] 孫艷琴.基于虛擬串口和數(shù)據(jù)庫技術(shù)的遠(yuǎn)程監(jiān)控系統(tǒng)軟件設(shè)計[D].武漢科技大學(xué),2013.