HTTP协议断点续传

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;

namespace HttpDemo
{
    class Program
    {
        //需要下载的路径
        static string url = "http://www.aseoe.com/demo/api/jquery_aseoe_001.zip";
        //获取文件全称
        static string fileName = Path.GetFileName(url);
        //保存路径
        static string localPath = "D:\\HttpCeShi\\" + fileName;
        //未下载完后面加.temp后缀名
        static string tempPath = localPath + ".temp";
        //偏移量(断点)
        static int pos;

static void Main(string[] args)
        {
            DownLoad();
            Console.ReadLine();
        }
        public static void DownLoad()
        {
            //如果存在要更新的文件就结束
            if (File.Exists(localPath))
                return;

Stream localfs = null;
            //如果不存在未上传完文件(需断点续传文件)
            if (File.Exists(tempPath))
            {
                localfs = new FileStream(tempPath, FileMode.Open);
            }

else
            {
                localfs = new FileStream(tempPath, FileMode.Create);
            }
            //获取断点
            pos = (int)localfs.Length;

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.Headers.Add("Accept-Charset", "GBK,utf-8");
            request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)";
            request.Method = "GET";
            request.Timeout = 30000;
            //文件总长度单位(B)
            long total = request.GetResponse().ContentLength;
            Console.WriteLine("总长度为:" + total);
            if (pos > 0)
                request.AddRange(pos);//偏移到断点

HttpWebResponse responseResult = (HttpWebResponse)request.GetResponse();
            using (Stream stream = responseResult.GetResponseStream())
            {
                byte[] buffer = new byte[total - pos];

int readSize = stream.Read(buffer, 0, buffer.Length);
                while (readSize > 0)
                {
                    localfs.Write(buffer, 0, readSize);
                    readSize = stream.Read(buffer, 0, buffer.Length);
                    Console.WriteLine("已下载:" + localfs.Length);
                }
                localfs.Close();
                File.Move(tempPath, localPath);//将临时文件改为正常文件后缀
                Console.WriteLine("下载完成!!!");
            }

}

}
}

时间: 2024-11-07 18:55:59

HTTP协议断点续传的相关文章

对http协议断点续传的理解

断点续传指的是下载传输文件可以中断,之后重新下载时可以接着中断的地方开始下载,而不必从头开始下载.断点续传需要客户端和服务端都支持. 原理是客户端一块一块的请求数据,最后将下载回来的数据块拼接成完整的数据. 1.客户端 发送http请求时发送请求头Rnge:bytes=x-x  表示需要请求的范围. 2.服务器端 返回http码206.(非断点传续返回200) 返回头有如下: Accept-Ranges:bytes--表示服务器端支持断点续传 ETag--标识服务器的下载资源有没有改变(随资源内

C# HTTP协议断点续传

using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Text; namespace HttpDemo { class Program { //需要下载的路径 static string url = "http://www.aseoe.com/demo/api/jquery_aseoe_001.zip"; //获

[转载]http协议 文件下载原理及多线程断点续传

最近研究了一下关于文件下载的相关内容,觉得还是写些东西记下来比较好.起初只是想研究研究,但后来发现写个可重用性比较高的模块还是很有必要的,我想这也是大多数开发人员的习惯吧.对于HTTP协议,向服务器请求某个文件时,只要发送类似如下的请求即可: GET /Path/FileName HTTP/1.0 Host: www.server.com:80 Accept: */* User-Agent: GeneralDownloadApplication Connection: close 每行用一个“回

TCP/IP协议原理与应用笔记02:断点续传

1.断点续传简介:       FTP(文件传输协议的简称)(File Transfer Protocol. FTP)客户端软件断点续传指的是在下载或上传时,将下载或上传任务(一个文件或一个压缩包)人为的划分为几个部分,每一个部分采用一个线程进行上传或下载,如果碰到网络故障,可以从已经上传或下载的部分开始继续上传下载未完成的部分,而没有必要从头开始上传下载.用户可以节省时间,提高速度. 2.用途 有时用户上传下载文件需要历时数小时,万一线路中断,不具备断点续传的FTP服务器或下载软件就只能从头重

C#实现http协议下载的断点续传

我们寄希望于万能的解决方案,但是现实的情况总是很糟糕.在软件编程的世界中,技术分散的情况尤为严重,且不说各种语言拥有的优势不能融合,单就一 门语言而言,就拥有众多的技术和相关技术需要学习.网络编程就是这种情况,tcp.udp.http和soap相关的协议(ftp不会玩),我们不得不在 同一个应用中使用不同难以整合的技术.tcp讲究精准,udp讲究性能,http对于穿越外网有这天然的优势,soap对于讲究编程模型的人来说是福音. 其实断点续传,众多技术都可以实现,只是想难易程度而以.经过比较分析发

支持断点续传的大文件传输协议

文件传输协议(FTP)是一个被广泛应用的网络协议,FTP技术作为文件传输的重要手段,在数据通信领域一直发挥着举足轻重的作用,不支持断点续传,是Internet上最早也是最广泛使用的应用之一. 从1971年A.K.Bhushan提出第一个FTP协议版本(RFC114)到现在,人们对FTP的应用已经历了40余年的时间,同时,许多基于FTP协议的数据传输软件也应运而生.如Windows操作系统下经常使用的支持FTP协议的软件有:CuteFTP.FlashFXP.迅雷(Thunder).快车(Flash

linux下wget命令,支持断点续传,ftp、http、https等协议

转载的地址:http://blog.163.com/[email protected]/blog/static/32097310201171833420905/ 今天操作远端机器的时候发现少一个安装包, 需要传到对方的机器上,还能使用通过的老办法,直接SSH连上去了,发现传的很慢, 只有40K的样子, 看时间还需要二个多小时就有点受不了了.想想有一台FTP服务器上有这个文件,可以直接从FTP服务器上下载不就得了.本想电话指导着操作,但想到对面的操作能力,不禁心里又打起鼓来. 使用google搜了

深入理解http/https协议

深入理解HTTP协议(转) http协议学习系列 1. 基础概念篇 1.1 介绍 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(World Wide Web Consortium)和Internet工作小组IETF(Internet Engineering Task Force)合作的结果,(他们)最终发布了一系列的RFC,RFC 1945定义了HTTP/1.0版本.其中最著名的就是RFC 2616.RFC 2616定义了今天普

【转载】HTTP协议详解

[本文转自]http://www.cnblogs.com/EricaMIN1987_IT/p/3837436.html 一.概念 协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器. HTTP协议,即超文本传输协议(Hypertext transfer protocol).是一种详细规定了浏览器和万维网(WWW = World Wide Web)服务器之间互相