多线程断点续传研究之一

多线程断点续传源码实战 本文还有配套的精品资源,点击获取 简介:多线程断点续传是一种优化文件传输的技术,结合了多线程和断点续传的功能。本源码将详细阐述这两个概念及其工作原理,并提供一个完整的源码实现。通过分块文件、创建线程池、记录断点和异常处理,该源码实现了高效且灵活的文件传输系统,适用于大文件的网络传输场景。用户可直接使用源码,根据需求进行定制,提升应用程序的文件传输体验。 1. 多线... 阅读详情

本人最近应网友之邀,在一篇文章的基础上去实现一个多线程断点续传下载文件的程序。但是在编写的过程中,发现问题多多。

 

原文地址为:

http://dev.youkuaiyun.com/develop/article/64/64877.shtm

 

知道通过HttpWebRequest就可以进行多线程断点下载,是我不用考虑从Socket写起。

 

对于一个多线程断点续传程序,我大致认为只要考虑如下几点问题就行了。

1. 下载数据可以从给定位置进行;

2. 可以进行分块下载;

3. 记录下载位置,以供下次重新下载的时候使用。

 

通过对原文的阅读来看,发现以上问题的前两个已经实现。这样会使需要附加的操作会更简单些。

 

为了能记录每个线程下载的位置,我借用了最简单的方式,就是xml方式。

 

以下就是多线程下载的主文件内容:

//--------------------------- Download File class ---------------------------------------

//---------------------------------------------------------------------------------------

//---File:          clsNewDownloadFile

//---Description:   The multi-download file class file using HttpWebRequest class

//---Author:        Knight

//---Date:          Aug.4, 2006

//---------------------------------------------------------------------------------------

//---------------------------{Download File class}---------------------------------------

 

namespace DownloadFile

{

    using System;

    using System.IO;

    using System.Net;

    using System.Text;

    using System.Security;

    using System.Threading;

    using System.Collections.Specialized;

    using System.Diagnostics;

    using System.Data;

 

    /// <summary>

    /// Download file info

    /// </summary>

    public class DownloadFileInfo

    {

        private string _RequestURL;

        private string _ResponseURL;

        private string _FileName;

        private int _TotalSize;

        private int _BlockLeftSize;

 

        public string RequestURL

        {

            get{ return _RequestURL; }

        }

 

        public string ResponseURL

        {

            get{ return _ResponseURL; }

        }

        public string FileName

        {

            get{ return _FileName; }

        }

        public int TotalSize

        {

            get{ return _TotalSize;}

            set{ _TotalSize = value;}

        }

        public int BlockLeftSize

        {

            get{ return _BlockLeftSize;}

            set{ _BlockLeftSize = value;}

        }

 

        public DownloadFileInfo(

            string RequestURL,

            string ResponseURL,

            string FileName,

            int TotalSize,

            int BlockLeftSize )

        {

            this._RequestURL = RequestURL;

            this._ResponseURL = ResponseURL;

            this._FileName = FileName;

            this._TotalSize = TotalSize;

            this._BlockLeftSize = BlockLeftSize;

        }

 

        public DownloadFileInfo(

            string RequestURL,

            string ResponseURL,

            string FileName ):

            this( RequestURL, ResponseURL, FileName, 0, 0 )

        {

        }

    }

 

    /// <summary>

    /// Download event arguments

    /// </summary>

    public class DownLoadEventArgs : System.EventArgs

    {

        private DownloadFileInfo _DownloadFileInfo;

        private int _Position;

        private int _ReadCount;

        private int _ThreadNO;

 

        public DownloadFileInfo DownFileInfo

        {

            get{ return _DownloadFileInfo; }

        }

        public int StartPosition

        {

            get{ return _Position; }

        }

        public int ReadCount

        {

            get{ return _ReadCount; }

        }

        public int ThreadNO

        {

            get{ return _ThreadNO; }

        }

 

        public DownLoadEventArgs(

            DownloadFileInfo DownFileInfo,

            int nStartPostion,

            int nReadCount,

            int nThreadNO )

        {

            this._DownloadFileInfo = DownFileInfo;

            this._Position = nStartPostion;

            this._ReadCount = nReadCount;

            this._ThreadNO = nThreadNO;

断点续传和多线程下载,可实现大文件传输 断点续传和多线程下载,可实现大文件传输.断点续传和多线程下载,可实现大文件传输. 立即下载

相关推荐

http多线程断点续传方案

这是所做项目中用到的一个多线程断点续传技术方案,希望对大家有帮助

android多线程断点续传

android多线程断点续传 android多线程断点续传 android多线程断点续传

Android蓝牙Mesh组网实战:从零搭建智能灯光控制系统(附完整代码)

本文详细介绍了基于Android平台开发蓝牙Mesh智能灯光控制系统的完整实战流程。从环境搭建、核心概念解析,到设备扫描配网、网络初始化、模型配置与消息通信,提供了完整的代码实现和调试技巧。重点讲解了如何使用开源Mesh库实现设备发现、分组控制、场景管理等核心功能,并分享了实际项目中遇到的典型问题与解决方案。

weixin_29174013的博客 655

STM32输入捕获功能,同时捕获8路波形。

STM32输入捕获功能,使用TIM2和TIM3同时捕获8路波形。 工作上的一个需求,要采集两组控制步进电机的信号。就是采集8个通道的方波,测量频率和计脉冲个数。看起来简简单单的东西,磕磕碰碰搞了两天,走了一些弯路,这里写出来记录一下。顺便理解一下输入捕获个多种用法。 1. 硬件设计 首先看一下用到那些IO口。在STM32手册里找这样TIMx_CHx的就是输入捕获的口了。 这里用了TIM2的4个口和TIM3的4个口。 定义 端口 TIM2_CH1 PA0 TIM2_CH2 PA1 TI

qq_36353009的博客 5123

避坑指南:Unity与Visual Studio开发环境配置中的5个常见问题及解决方案

本文针对Unity与Visual Studio开发环境配置中的5个常见问题,提供了详细的解决方案。重点解决了项目文件生成失败导致命名空间无法识别、调试器无法附加、包管理器与扩展安装混乱、脚本编译错误以及多版本环境冲突等核心痛点,帮助开发者构建稳定高效的开发调试环境。

weixin_27791839的博客 280

嵌入式通信协议框架的四层架构设计与实现

本文详细介绍一种模块化的嵌入式通信协议框架设计,采用四层架构:硬件抽象层统一管理数据收发与缓冲,隔离硬件差异;协议管理层通过特征识别自动路由多协议数据,支持动态扩展;协议处理层独立实现各协议解析/构建,确保校验安全与零拷贝效率;应用层采用表驱动模式处理业务逻辑,与协议细节解耦。 该架构已应用于工业控制等领域,具备强类型安全、高扩展性和平台无关性特点,显著提升复通信场景下的开发效率与系统可靠性。提供完整代码实现与设计要点分析,助力开发者构建高效通信栈。

Bit_Dong的博客 2464

【回答问题】ChatGPT上线了!如何安装python-ipopt?python-ipopt有哪些用法?

python-ipopt是一种基于Python语言的求解非线性最优化问题的软件包。它使用了Interior Point Optimizer(IPOPT)算法来求解最优化问题。这段代码使用python-ipopt求解了一个无约束的非线性最小化问题,其目标函数为(x[0] - 1) ** 2 + (x[1] - 2) ** 2,求解结果为x_opt。求解线性规划问题、二次规划问题、二次范数最小化问题等类型的最优化问题。对于给定的最优化问题,可以设置不同的求解参数来控制求解的精度和效率。

源代码杀手的博客 2144

SerDes系列之码间干扰的概念

码间干扰出现在传输介质或者元器件的带宽小于所发送的信号带宽时,从时域角度来看,传输路径的带宽限制会使发送信号的上升沿的变化速率变慢,有可能对信号造成高频衰减,并影响到实际数字逻辑电平的转换时序。

一只豌豆象的博客 3464

(十一)随机性与独立性回顾

随机性与独立性回顾

旺旺的碎冰冰~的博客 1017

【proteus】模拟串口和物理串口通讯

proteus提供了两种串口,一种是模拟的串口,还有一张是用软件仿真到硬件的物理串口。他们的区别就是:模拟串口只能在proteus内部进行通讯,但是物理可以通过软件映射到硬件上和单机或者串口软件通讯。 物理串口在元器件搜索COMPIM即可找到。 模拟串口在这里: PROTEUS仿真图: 物理串口COMPIM的设置: 模拟串口的设置: VSPD是一款虚拟串口软件,VSPD下载链接: 链接:https://pan.baidu.com/s/1AZygJCeWZfQTnxdCb_3TPg 提取码:12pm

阿蛋的博客 8933

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

上一篇: 《Effective C#》Item 7:推荐使用不可改变的原子值类型
下一篇: 浅谈C#托管程序中的资源释放问题
Knight94
博客等级 码龄25年 1013粉丝 87原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值