C#实现http协议下载的断点续传
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
我们寄希望于万能的解决方案,但是现实的情况总是很糟糕。在软件编程的世界中,技术分散的情况尤为严重,且不说各种语言拥有的优势不能融合,单就一门语言而言,就拥有众多的技术和相关技术需要学习。网络编程就是这种情况,tcp、udp、http和soap相关的协议,我们不得不在同一个应用中使用不同难以整合的技术。tcp讲究精准,udp讲究性能,http对于穿越外网有这天然的优势,soap对于讲究编程模型的人来说是福音。 其实断点续传,众多技术都可以实现,只是难易程度而以。经过比较分析发现,http对于断点下载比较容易实现,它最成功的地方在于,不需要服务端的实现,只需将需要下载的文件放置在iis服务器中即可。 下面我会根据下面一段代码分析http协议的。 /// <summary> //比如uri=http://localhost/Rabom/1.rar;iis就需要自己配置了。 //构造文件完全限定名,准备将网络流下载为本地文件
if (File.Exists(fileFullName)) //开辟内存空间 //请求地址 //获取网络流 //获取文件实际长度 while (length > 0) //将字节数组写入流 //继续下载 ns.Close(); } 在上面的代码中,比较重要的就是类HttpWebRequest,这个类封装了http协议访问网络资源的方法,与WebClient不同的是,HttpWebRequest允许我们使用网络流的方式进行下载,我们通过URI创建一个网络流,我们就可以开始获取我们需要的数据了。在http协议的报文中,会进行详细的描述,当然描述的内容很多,HttpWebRequest都帮我们做了,说点题外话,http协议会将我们计算机环境写进报文,其中包括计算机名,计算机所在的ip地址。当然也包括我们所讲的断点下载的关键报文Range,这个报文就是我们需要开始下载文件的起始位置,这样我们就可以根据本地文件已经下载了多少,为断点下载时所要求的起始位置提供依据。 本地文件刚创建的时候,fs.Lenght为0所以我们在iis服务器上请求的网络流的游标是在流的起始位置,当我们停止下载后,再度下载该资源的时候,网络流的游标位置会根据range的值设置到相应的位置,这样我们就可以断点下载了。 该文章在 2024/3/13 0:24:25 编辑过 |
关键字查询
相关文章
正在查询... |