亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

C#: 實現支持斷點續傳多線程下載

2019-11-17 03:13:34
字體:
來源:轉載
供稿:網友
C#: 實現支持斷點續傳多線程下載

/* .Net/C#:實現支持斷點續傳多線程下載的Http Web客戶端工具類(C# DIY HttpWebClient)* Reflector了一下System.Net.WebClient ,改寫或增加了若干:* DownLoad、Upload相關方法!* DownLoad相關改動較大!*增加了DataReceive、ExceptionOccurrs事件!*了解服務器端與客戶端交互的HTTP協議參閱:*使文件下載的自定義連接支持FlashGet的斷點續傳多線程鏈接下載! jsp/Servlet實現!* http://blog.csdn.net/playyuer/archive/2004/08/02/58430.aspx*使文件下載的自定義連接支持FlashGet的斷點續傳多線程鏈接下載! C#/asp.net實現!* http://blog.csdn.net/playyuer/archive/2004/08/02/58281.aspx*///2005-03-14修訂:/* .Net/C#:實現支持斷點續傳多線程下載的工具類* Reflector了一下System.Net.WebClient ,改寫或增加了若干:* DownLoad、Upload相關方法!*增加了DataReceive、ExceptionOccurrs 事件*/namespaceMicroshaoft.Utils{usingSystem;usingSystem.IO;usingSystem.Net;usingSystem.Text;usingSystem.Security;usingSystem.Threading;usingSystem.Collections.Specialized;/// <summary>///記錄下載的字節位置/// </summary>public classDownLoadState{PRivate string_FileName;private string_AttachmentName;private int_Position;private string_RequestURL;private string_ResponseURL;private int_Length;private byte[]_Data;public stringFileName{get{return_FileName;}}public intPosition{get{return_Position;}}public intLength{get{return_Length;}}public stringAttachmentName{get{return_AttachmentName;}}public stringRequestURL{get{return_RequestURL;}}public stringResponseURL{get{return_ResponseURL;}}public byte[]Data{get{return_Data;}}internalDownLoadState(stringRequestURL,stringResponseURL,stringFileName,stringAttachmentName,intPosition,intLength,byte[]Data){this._FileName=FileName;this._RequestURL=RequestURL;this._ResponseURL=ResponseURL;this._AttachmentName=AttachmentName;this._Position=Position;this._Data=Data;this._Length=Length;}internalDownLoadState(stringRequestURL,stringResponseURL,stringFileName,stringAttachmentName,intPosition,intLength, ThreadCallbackHandler tch){this._RequestURL=RequestURL;this._ResponseURL=ResponseURL;this._FileName=FileName;this._AttachmentName=AttachmentName;this._Position=Position;this._Length=Length;this._ThreadCallback=tch;}internalDownLoadState(stringRequestURL,stringResponseURL,stringFileName,stringAttachmentName,intPosition,intLength){this._RequestURL=RequestURL;this._ResponseURL=ResponseURL;this._FileName=FileName;this._AttachmentName=AttachmentName;this._Position=Position;this._Length=Length;}privateThreadCallbackHandler _ThreadCallback;publicHttpWebClient httpWebClient{get{return this._hwc;}set{this._hwc= value;}}internalThreadthread{get{return_thread;}set{_thread= value;}}privateHttpWebClient _hwc;privateThread_thread;//internal voidStartDownloadFileChunk(){if(this._ThreadCallback!= null){this._ThreadCallback(this._RequestURL,this._FileName,this._Position,this._Length);this._hwc.OnThreadProcess(this._thread);}}}//委托代理線程的所執行的方法簽名一致public delegate voidThreadCallbackHandler(stringS,strings,intI,inti);//異常處理動作public enumExceptionActions{Throw,CancelAll,Ignore,Retry}/// <summary>///包含Exception事件數據的類/// </summary>public classExceptionEventArgs:System.EventArgs{privateSystem.Exception_Exception;privateExceptionActions _ExceptionAction;privateDownLoadState _DownloadState;publicDownLoadState DownloadState{get{return_DownloadState;}}publicException Exception{get{return_Exception;}}publicExceptionActions ExceptionAction{get{return_ExceptionAction;}set{_ExceptionAction= value;}}internalExceptionEventArgs(System.Exceptione, DownLoadState DownloadState){this._Exception =e;this._DownloadState=DownloadState;}}/// <summary>///包含DownLoad事件數據的類/// </summary>public classDownLoadEventArgs:System.EventArgs{privateDownLoadState _DownloadState;publicDownLoadState DownloadState{get{return_DownloadState;}}publicDownLoadEventArgs(DownLoadState DownloadState){this._DownloadState=DownloadState;}}public classThreadProcessEventArgs:System.EventArgs{privateThread_thread;publicThreadthread{get{return this._thread;}}publicThreadProcessEventArgs(Threadthread){this._thread=thread;}}/// <summary>///支持斷點續傳多線程下載的類/// </summary>public classHttpWebClient{private static object_SyncLockObject= newobject();public delegate voidDataReceiveEventHandler(HttpWebClientSender, DownLoadEventArgs e);public eventDataReceiveEventHandler DataReceive;//接收字節數據事件public delegate voidExceptionEventHandler(HttpWebClientSender, ExceptionEventArgs e);public eventExceptionEventHandler ExceptionOccurrs;//發生異常事件public delegate voidThreadProcessEventHandler(HttpWebClientSender, ThreadProcessEventArgs e);public eventThreadProcessEventHandler ThreadProcessEnd;//發生多線程處理完畢事件private int_FileLength;//下載文件的總大小public intFileLength{get{return_FileLength;}}/// <summary>///分塊下載文件/// </summary>/// <param name="Address">URL地址</param>/// <param name="FileName">保存到本地的路徑文件名</param>/// <param name="ChunksCount">塊數,線程數</param>public voidDownloadFile(stringAddress,stringFileName,intChunksCount){intp=0;// positionints=0;// chunk sizestringa= null;HttpWebRequesthwrq;HttpWebResponsehwrp= null;try{hwrq= (HttpWebRequest)WebRequest.Create(this.GetUri(Address));hwrp= (HttpWebResponse)hwrq.GetResponse();longL =hwrp.ContentLength;hwrq.Credentials=this.m_credentials;L = ((L == -1) || (L >0x7fffffff)) ? ((long)0x7fffffff) : L;//Int32.MaxValue該常數的值為2,147,483,647;即十六進制的0x7FFFFFFFintl= (int) L;this._FileLength=l;//在本地預定空間(竟然在多線程下不用先預定空間)// FileStream sw = new FileStream(FileName, FileMode.OpenOrCreate, Fileaccess.ReadWrite, FileShare.ReadWrite);// sw.Write(new byte[l], 0, l);// sw.Close();// sw = null;boolb= (hwrp.Headers["Accept-Ranges"] != null &hwrp.Headers["Accept-Ranges"] =="bytes");a=hwrp.Headers["Content-Disposition"];//attachmentif(a!= null){a=a.Substring(a.LastIndexOf("filename=") +9);}else{a=FileName;}intss=s;if(b){s=l/ChunksCount;if(s<2*64*1024)//塊大小至少為128 K字節{s=2*64*1024;}ss=s;inti=0;while(l>s){l-=s;if(l<s){s+=l;}if(i++ >0){DownLoadState x= newDownLoadState(Address, hwrp.ResponseUri.AbsolutePath,FileName, a, p, s,newThreadCallbackHandler(this.DownloadFileChunk));//單線程下載// x.StartDownloadFileChunk();x.httpWebClient=this;//多線程下載Threadt= newThread(newThreadStart(x.StartDownloadFileChunk));//this.OnThreadProcess(t);t.Start();}p+=s;}s=ss;byte[]buffer=this.ResponseAsBytes(Address, hwrp, s,FileName);this.OnThreadProcess(Thread.CurrentThread);// lock (_SyncLockObject)// {// this._Bytes += buffer.Length;// }}}catch(Exceptione){ExceptionActions ea=ExceptionActions.Throw;if(this.ExceptionOccurrs!= null){DownLoadState x= newDownLoadState(Address, hwrp.ResponseUri.AbsolutePath,FileName, a, p, s);ExceptionEventArgs eea= newExceptionEventArgs(e, x);ExceptionOccurrs(this, eea);ea=eea.ExceptionAction;}if(ea==ExceptionActions.Throw){if(!(eisWebException) && !(eisSecurityException)){thrownewWebException("net_webclient", e);}throw;}}}internal voidOnThreadProcess(Threadt){if(ThreadProcessEnd!= null){ThreadProcessEventArgs tpea= newThreadProcessEventArgs(t);ThreadProcessEnd(this, tpea);}}/// <summary>///下載一個文件塊,利用該方法可自行實現多線程斷點續傳/// </summary>/// <param name="Address">URL地址</param>/// <param name="FileName">保存到本地的路徑文件名</param>/// <param name="Length">塊大小</param>public voidDownloadFileChunk(stringAddress,stringFileName,intFromPosition,intLength){HttpWebResponsehwrp= null;stringa= null;try{//this._FileName = FileName;HttpWebRequesthwrq= (HttpWebRequest)WebRequest.Create(this.GetUri(Address));//hwrq.Credentials = this.m_credentials;hwrq.AddRange(FromPosition);hwrp= (HttpWebResponse)hwrq.GetResponse();a=hwrp.Headers["Content-Disposition"];//attachmentif(a!= null){a=a.Substring(a.LastIndexOf("filename=") +9);}else{a=FileName;}byte[]buffer=this.ResponseAsBytes(Address, hwrp,Length,FileName);// lock (_SyncLockObject)// {// this._Bytes += buffer.Length;// }}catch(Exceptione){ExceptionActions ea=ExceptionActions.Throw;if(this.ExceptionOccurrs!= null){DownLoadState x= newDownLoadState(Address, hwrp.ResponseUri.AbsolutePath,FileName, a, FromPosition,Length);ExceptionEventArgs eea= newExceptionEventArgs(e, x);ExceptionOccurrs(this, eea);ea=eea.ExceptionAction;}if(ea==ExceptionActions.Throw){if(!(eisWebException) && !(eisSecurityException)){thrownewWebException("net_webclient", e);}throw;}}}internal byte[]ResponseAsBytes(stringRequestURL,WebResponseResponse,longLength,stringFileName)

上一篇:Random的實現原理

下一篇:c#寫擴展方法

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91福利视频网| 欧美性感美女h网站在线观看免费| 国产精品久久久久久久久男| 1769国产精品| 国产免费亚洲高清| 久久精品精品电影网| 亚洲社区在线观看| 成人免费直播live| 国产精品成人播放| 国产精品久久久久久久久久小说| 91精品视频在线看| 精品视频在线导航| 精品久久久久人成| 欧美一区亚洲一区| 欧美亚洲视频一区二区| 国产精品视频资源| 久久精品久久久久| 欧美老女人xx| 2018日韩中文字幕| 国产精品久久久久久婷婷天堂| 川上优av一区二区线观看| 国产精品视频久久| 亚洲欧美在线一区| 精品五月天久久| 久久人91精品久久久久久不卡| 日本精品久久久| 中文字幕亚洲欧美在线| 中文字幕精品av| 久久久免费精品| 日韩精品在线视频美女| 欧美成人精品影院| 色偷偷噜噜噜亚洲男人| 91久久久久久国产精品| 亚洲成人久久久久| 久久国产精品首页| 亚洲国产精品推荐| 77777亚洲午夜久久多人| 91精品视频观看| 精品视频在线观看日韩| 国产成人高清激情视频在线观看| 日韩欧美在线视频日韩欧美在线视频| 中文字幕最新精品| 琪琪亚洲精品午夜在线| 日韩高清免费在线| 亚洲精品网站在线播放gif| 色噜噜狠狠狠综合曰曰曰| 国产亚洲精品美女| 国内精品久久久久久久久| 亚洲精品按摩视频| 亚洲白虎美女被爆操| 国产精品一区二区女厕厕| 久久久久久噜噜噜久久久精品| 自拍偷拍免费精品| 亚洲国产精品福利| 久久精品国产99国产精品澳门| 亚洲最大的网站| 97婷婷大伊香蕉精品视频| 国产精品私拍pans大尺度在线| 91九色国产视频| 亚洲va欧美va国产综合剧情| 国产日韩欧美中文在线播放| 欧美在线视频导航| 欧美精品aaa| 欧美在线视频观看| 成人h视频在线| 欧美性猛交xxxx黑人| 欧美激情精品久久久久久久变态| 韩国三级电影久久久久久| 亚洲v日韩v综合v精品v| 欧美黑人xxxx| 91成人在线观看国产| 亚洲第一综合天堂另类专| 国产精品美乳一区二区免费| 久久久久久久久综合| 久久九九亚洲综合| 国产精品99久久久久久久久久久久| www国产91| 午夜精品www| 日本久久久a级免费| 国产成人亚洲综合| 午夜精品久久久99热福利| 全色精品综合影院| 中文字幕av一区二区三区谷原希美| 久久九九有精品国产23| 亚洲国产精品美女| 久久精品视频va| 欧美日韩国产色视频| 中文字幕av一区二区三区谷原希美| 国产成人精品综合| 久久999免费视频| 啊v视频在线一区二区三区| 欧美乱人伦中文字幕在线| 精品视频久久久久久久| 91av在线播放| 国产一区二区日韩精品欧美精品| 久久精品国产亚洲| 亚洲午夜未满十八勿入免费观看全集| 国产欧美精品一区二区| 国产精品成人观看视频国产奇米| 欧美日韩国产成人| 欧美性一区二区三区| 日本成人免费在线| 欧美乱妇40p| 亚洲人成电影在线观看天堂色| 91伊人影院在线播放| 欧美在线一区二区视频| 日韩免费观看高清| 日韩中文字幕在线视频播放| 欧美乱大交xxxxx| 日韩欧美中文字幕在线播放| 国产午夜精品全部视频播放| 亚洲a级在线播放观看| 久久久国产精品亚洲一区| 国产精品激情av在线播放| 成人精品久久一区二区三区| 日韩亚洲国产中文字幕| 日韩在线播放一区| 欧美性xxxx极品高清hd直播| 欧美性猛交xxxx乱大交3| 高清亚洲成在人网站天堂| 日本不卡视频在线播放| 欧美第一页在线| 久久久亚洲国产天美传媒修理工| 久久久国产精品视频| 亚洲精品免费在线视频| 日韩欧美成人精品| 日韩精品视频在线观看免费| 亚洲第一免费播放区| 一区二区三区视频在线| 色综合久久精品亚洲国产| 亚洲影院在线看| 91日本在线观看| 91产国在线观看动作片喷水| 国产亚洲免费的视频看| 欧美激情一二区| 中文字幕日韩欧美在线| 亚洲国模精品一区| 欧美日韩激情视频8区| 97视频在线观看免费高清完整版在线观看| 中文字幕在线成人| 日本欧美黄网站| 亚洲人成网7777777国产| 亚洲精品有码在线| 国产精品嫩草影院一区二区| 这里只有精品在线播放| 国产在线播放91| 中日韩美女免费视频网站在线观看| 国产精品99久久久久久久久久久久| www.欧美视频| 亚洲国产免费av| 久久精品色欧美aⅴ一区二区| 在线精品高清中文字幕| 久久久久久久久久国产精品| 亚洲欧美激情精品一区二区| 亚洲精品中文字| 国产欧美精品va在线观看| 日韩有码在线视频| 国产精品69精品一区二区三区| 成人福利网站在线观看| 夜夜嗨av一区二区三区免费区| 精品视频在线导航| 中文字幕亚洲欧美| 欧美另类在线观看| 国产成人精品免费视频|