在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
这里只是说明多线程下载的理论基础,嘿嘿,并没有写多线程下载的代码,标题党了,但是我相信,看完这个代码就应该能够多线程的方式去下载一个文件了. 多线程下载是需要服务器支持的,这里并没有判断服务器不支持的情况. 其原理 在发送 http 请求时标记头文件,告诉服务器我需要这个文件的 第几个字节 到 第几个字节.如果服务器不支持让你分段取文件,可以想想看服务器会怎么做. 没错,他把整个文件给你了. 一定得判断 服务器不支持 的情况. public void Worker() { string url = "https://files.cnblogs.com/cnryb/HttpSer.zip"; string path = "a.zip"; using (FileStream fs = new FileStream( path, FileMode.OpenOrCreate, FileAccess.Write, FileShare.Read, 2048, FileOptions.RandomAccess )) { //先下载文件的第100个字节到最后 fs.Seek(100, SeekOrigin.Begin); Down(fs, url, 100); //下载前100个字节 fs.Seek(0, SeekOrigin.Begin); Down(fs, url, 0, 99); } }
public void Down(FileStream fs, string url, int start, int end = -1) { HttpWebRequest hwr = WebRequest.Create(url) as HttpWebRequest; if (end == -1) hwr.AddRange(start); else hwr.AddRange(start, end); HttpWebResponse resp = hwr.GetResponse() as HttpWebResponse; using (Stream input = resp.GetResponseStream()) { byte[] bs = new byte[2048]; int count; while ((count = input.Read(bs, 0, bs.Length)) != 0) { fs.Write(bs, 0, count); } } } |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论