在博客园上一搜就可以找到很多关于“asp.net 多线程断点续传”这方面的文章,如

http://zzk.cnblogs.com/s?w=asp.net+%e5%a4%9a%e7%ba%bf%e7%a8%8b%e6%96%ad%e7%82%b9%e7%bb%ad%e4%bc%a0&p=1

但是经过我测试,没有一个是真正实用的。

在这篇文章中(http://www.cnblogs.com/bestcomy/archive/2004/08/10/31950.html)我2007年就留言:(37楼),问题到现在还没有解决。

使用如下方法测试:

1、vs2010直接启用调试。

2、把代码编译到release版本,.NET 2.0、.NET 4.0 都有,分别发布到win2003+iis6、win2008+iis7中。

3、然后用下载软件(如网络传送带、网络蚂蚁、迅雷等)访问这个提供下载的网址,下载软件开10个任务,每个任务10线程,每个任务下载限速50K左右。

结果造成asp.net给直接挂起了!尝试访问任何aspx的页面则一直处于挂起状态,即页面无法打开,IE9选项卡的那个状态标志一直在转。

一开始以为是测试系统IE9达到最大链接数了(但是开其他第三方网站是可以的),马上在其他电脑访问也不行,状态一直挂起,甚至影响到这台服务器上的其他网站,只要是aspx的全部死掉,静态的又可以正常访问(jpg、css、js等文件),服务器的cpu和内存不占多少,几乎可忽略,下载软件停止下载后又恢复了!实在是想不出什么好方法了。

再次附上我的代码,和在博客园搜到文章上的差不多:

protected void Page_Load(object sender, EventArgs e)        {string q = Request.QueryString.Get("q");

            System.IO.FileInfo f = new System.IO.FileInfo(Server.MapPath("/") + q);

int speed = 5000;//5K

            FileStream file = new FileStream(f.FullName, FileMode.Open, FileAccess.Read, FileShare.Read);            BinaryReader br = new BinaryReader(file);

            Response.AddHeader("Accept-Ranges", "bytes");

            Response.Buffer = false;long fileLength = file.Length;long startBytes = 0;

int buff = 10240; //每线程10K bytes

int sleep = 1000 * buff / speed;

if (Request.Headers["Range"] != null)            {                Response.StatusCode = 206;string[] range = Request.Headers["Range"].Split(new char[] { '=', '-' });

                startBytes = Convert.ToInt64(range[1]);            }

// 添加头信息,指定文件大小,让浏览器能够显示下载进度            Response.AddHeader("Content-Length", (fileLength - startBytes).ToString());

if (startBytes != 0)            {                //支持多线程,文件分段处理                               Response.AddHeader("Content-Range", string.Format(" bytes {0}-{1}/{2}", startBytes, fileLength - 1, fileLength));            }

//保持链接            Response.AddHeader("Connection", "Keep-Alive");

//设置输出流数据类型。添加头信息,为"文件下载/另存为"对话框指定默认文件名            Response.ContentType = "application/octet-stream";            Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(f.Name, System.Text.Encoding.UTF8));

//定义流的位置            br.BaseStream.Seek(startBytes, SeekOrigin.Begin);

long dataSent = fileLength - startBytes;long dataLeft = 0;

while (dataLeft < dataSent)            {if (Response.IsClientConnected)                {                    Response.BinaryWrite(br.ReadBytes(buff));                    dataLeft += buff;                    Response.Flush();                    Thread.Sleep(sleep);                }else                {                    dataSent = -1;                }            }            Response.End();            br.Close();            file.Close();        }

转载于:https://www.cnblogs.com/zzmsl/archive/2011/12/05/can_multi-threaded_downloading_with_aspdotnet.html

asp.net 能否多线程断点续传?相关推荐

  1. Asp.net(c#)实现多线程断点续传

    http://www.cnblogs.com/bestcomy/archive/2004/08/10/31950.html 以前一直错误的认为在ASP.NET中无法通过编程方式实现多线程断点续传,今天 ...

  2. android多线程断点续传

    在android下面的断点续传和java下面没有太大的冲突,就是在配置文件里面加上一些特定的访问权限就可以了 如下式在AndroidManifest.xml加入的权限 <!--  访问inter ...

  3. 多线程断点续传下载软件-闪电下载2009

    今天终于把毕业设计做完了,题目是多线程断点续传的下载软件,从五月初到现在,日以继夜的工作,真是累啊....下面可以开始写论文了,哈哈...下面贴两张图,以示庆贺.. 源文件:LightDown.rar ...

  4. android 多线程断点续传下载 三

    android 多线程断点续传下载 三 转载于:https://www.cnblogs.com/zhujiabin/p/5660093.html

  5. Android Day05-网络编程之文件下载之多线程断点续传技术

    文件下载之多线程断点续传技术底层实现  通过HttpURLConnection连接  断点续传核心步骤:       1.UI设计 2.获取服务器文件的大小,通过连接的一个方法getContentLe ...

  6. 撸了个多线程断点续传下载器,我从中学习到了这些知识(附开源地址)

    2020年6月20日 上海张江 感谢看客老爷点进来了,周末闲来无事,想起同事强哥的那句话:"你有没有玩过断点续传?" 当时转念一想,断点续传下载用的确实不少,具体细节嘛,真的没有去 ...

  7. android多线程访问网络,Android Day05-网络编程之文件下载之多线程断点续传技术

    文件下载之多线程断点续传技术底层实现 通过HttpURLConnection连接 断点续传核心步骤: 1.UI设计 2.获取服务器文件的大小,通过连接的一个方法getContentLength()来得 ...

  8. java 多线程 从无到有_多线程断点续传(简单demo)——从无到有

    复杂功能总是由许多小功能组合在一起完成的,一步一步完成多线程断点续传,可以从以下几个方面来考虑. 第一,实现简单的下载: 第二,打断下载线程,实现暂停功能: 第三,从已经下载点进行续传: 第四,引入多 ...

  9. OkHttp实现多线程断点续传下载,单例模式下多任务下载管理器,一起抛掉sp,sqlite的辅助吧

    丨版权说明 :<OkHttp实现多线程断点续传下载,单例模式下多任务下载管理器,一起抛掉sp,sqlite的辅助吧>于当前CSDN博客和乘月网属同一原创,转载请说明出处,谢谢. 最近项目需 ...

最新文章

  1. 通过Windows10上的VS Code打开远端Ubuntu上的项目操作步骤
  2. .net反射详解 原文://http://blog.csdn.net/wenyan07/article/details/27882363
  3. 改编码格式_编码不规范,同事真的会两行泪?
  4. c语言派,C语言中 派/4=1-1/3+1/5-1/7....公式求派
  5. calayer动画总结(一)
  6. torque安装笔记
  7. VMware产品支持倒计时
  8. TokenInsight:BTC新增人气缺乏,多头持仓量持续上升
  9. 关于win7启动看不到桌面的解决方法
  10. OPPO Monitor Platform:从应用请求到后端处理,自研解决服务化架构系统监控难题...
  11. LaTeX 切换其它另外的期刊会议模板
  12. 荒野大镖客ol 服务器位置,荒野大镖客OL盗贼据点分布位置
  13. Oracle 11g企业版下载
  14. 设置透明主题引起动画失效以及打开其他应用闪现桌面图标的问题
  15. VirtualBox升级VirtualBox Guest Additions增强功能
  16. 虚拟服务器和vdi,比较瘦客户端和VDI
  17. Halide教程Part01:build、语法、调度、流水线
  18. 【26】Android - 初识Fragment
  19. 【分享】中毒后360安全卫士打不开的终极解决办法
  20. Linux中的lo回环接口

热门文章

  1. 系统接口对接的进度工作应该谁来干_第三方分账系统开发的那些坑,给你节省几十万...
  2. mysql好玩的代码_mysql的order by与where出现的好玩事
  3. python封装c++接口_使用MetaSIP自动生成SIP封装C++到Python接口
  4. 数字图像处理与python实现 pdf_正版 数字图像处理与Python实现 高等院校计算机科学 人工智能 信号与信息处理 通信工程等专业的...
  5. c# 分类 机器学习_C#也能做机器学习?基于.NET的AI智能应用市场还是一片“处女地”...
  6. 节约里程法java代码_患者,男,70岁,有多年排尿困难,呈淋漓状,近2年来双侧腹股沟区出现半年圆形肿块,站立时明显,平卧后消失,体检时压迫内环肿块仍出现,诊断为...
  7. iis7.0 https访问显示403访问被拒绝_提高网站访问性能——Tomcat优化
  8. oracle创建表空间blocksize,oracle表空间大小的限制和DB_BLOCK_SIZE的概念
  9. Altium Designer 21 最全快捷键 分享 共1000多个|电子设计效率提高全靠它
  10. 在阿里、腾讯、美团工作有什么区别?