C#實現(xiàn)http協(xié)議下載的斷點續(xù)傳
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
我們寄希望于萬能的解決方案,但是現(xiàn)實的情況總是很糟糕。在軟件編程的世界中,技術分散的情況尤為嚴重,且不說各種語言擁有的優(yōu)勢不能融合,單就一門語言而言,就擁有眾多的技術和相關技術需要學習。網絡編程就是這種情況,tcp、udp、http和soap相關的協(xié)議,我們不得不在同一個應用中使用不同難以整合的技術。tcp講究精準,udp講究性能,http對于穿越外網有這天然的優(yōu)勢,soap對于講究編程模型的人來說是福音。 其實斷點續(xù)傳,眾多技術都可以實現(xiàn),只是難易程度而以。經過比較分析發(fā)現(xiàn),http對于斷點下載比較容易實現(xiàn),它最成功的地方在于,不需要服務端的實現(xiàn),只需將需要下載的文件放置在iis服務器中即可。 下面我會根據(jù)下面一段代碼分析http協(xié)議的。 /// <summary> //比如uri=http://localhost/Rabom/1.rar;iis就需要自己配置了。 //構造文件完全限定名,準備將網絡流下載為本地文件
if (File.Exists(fileFullName)) //開辟內存空間 //請求地址 //獲取網絡流 //獲取文件實際長度 while (length > 0) //將字節(jié)數(shù)組寫入流 //繼續(xù)下載 ns.Close(); } 在上面的代碼中,比較重要的就是類HttpWebRequest,這個類封裝了http協(xié)議訪問網絡資源的方法,與WebClient不同的是,HttpWebRequest允許我們使用網絡流的方式進行下載,我們通過URI創(chuàng)建一個網絡流,我們就可以開始獲取我們需要的數(shù)據(jù)了。在http協(xié)議的報文中,會進行詳細的描述,當然描述的內容很多,HttpWebRequest都幫我們做了,說點題外話,http協(xié)議會將我們計算機環(huán)境寫進報文,其中包括計算機名,計算機所在的ip地址。當然也包括我們所講的斷點下載的關鍵報文Range,這個報文就是我們需要開始下載文件的起始位置,這樣我們就可以根據(jù)本地文件已經下載了多少,為斷點下載時所要求的起始位置提供依據(jù)。 本地文件剛創(chuàng)建的時候,fs.Lenght為0所以我們在iis服務器上請求的網絡流的游標是在流的起始位置,當我們停止下載后,再度下載該資源的時候,網絡流的游標位置會根據(jù)range的值設置到相應的位置,這樣我們就可以斷點下載了。 該文章在 2024/3/13 0:24:25 編輯過 |
關鍵字查詢
相關文章
正在查詢... |