如何使用.NET实现断点续传功能
ubuntu笔记之wget使用方法

wget可以跟踪HTML页面上的链接依次下载来创建远程服务器的本地版本,完全重建原始站点的目录结构。这又常被称作"递归下载"。在递归下载的时候,wget遵循Robot Exclusion标准(/robots.txt). wget可以在下载的同时,将链接转换成指向本地文件,以方便离线浏览。
wget非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性.如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完毕。如果是服务器打断下载过程,它会再次联到服务器上从停止的地方继续下载。这对从那些限定了链接时间的服务器上下载大文件非常有用。
-S, --server-response 打印服务器的回应
--spider 不下载任何东西
-T, --timeout=SECONDS 设定响应超时的秒数
-w, --wait=SECONDS 两次尝试之间间隔SECONDS秒
-nc, --no-clobber 不要覆盖存在的文件或使用.#前缀
-c, --continue 接着下载没下载完的文件
--progress=TYPE 设定进程条标记
-N, --timestamping 不要重新下载文件除非比本地文件新
* 下载
--bind-address=ADDRESS 指定本地使用地址(主机名或IP,当本地有多个IP或名字时使用)
-t, --tries=NUMBER 设定最大尝试链接次数(0 表示无限制).
-O --output-document=FILE 把文档写到FILE文件中
--ignore-length 忽略 `Content-Length'头域
--header=STRING 在headers中插入字符串 STRING
ASP.NETWebAPi之断点续传下载(下)

WebAPi之断点续传下载(下)前⾔上⼀篇我们穿插了C#的内容,本篇我们继续来讲讲webapi中断点续传的其他情况以及利⽤webclient来实现断点续传,⾄此关于webapi断点续传下载以及上传内容都已经全部完结,⼀直嚷嚷着把SQL Server和Oracle数据库再重新过⼀遍,这篇过完,就要开始新的征程,每⼀个阶段都应该有⾃⼰的⼩⽬标,要不然当⼯作太忙没时间去充电,太闲⼜变得懒散,想想⼀切是为了未来买得起孩⼦⾼档的奶粉就⼜有动⼒了。
话题关于webapi断点续传下载的情况,之前我们利⽤webapi内置的api展开了具体的实现,这⼀节我们利⽤已经⽼掉⽛的技术来实现,这个是看了⼀篇⽼外⽂章⽽想到的,具体地址忘记了,利⽤内存映射⽂件来实现断点续传,内存映射⽂件最常见的应⽤场景莫过于对于多个进程之间共享数据,我们知道进程与进程之间只能操作已经分配好各⾃的内存,当我们需要⼀个进程与另外⼀个进程共享⼀块数据时我们该如何做呢,这个时候就要⽤到内存映射⽂件(MemoryMappedFile),内存映射⽂件是单⼀机器多进程间数据通信的最⾼效的⽅式,好了关于内存映射⽂件具体内容可以参考园友【】的⽂章。
我们通过内存映射⽂件管理虚拟内存然后将其映射到磁盘上具体的⽂件中,当然我们得知道所谓的⽂件能够被映射并不是将⽂件复制到虚拟内存中,⽽是由于会被应⽤程序访问到,很显然windows会加载部分物理⽂件,通过使⽤内存映射⽂件我们能够保证操作系统会优化磁盘访问,此外我们能够得到内存缓存的形式。
因为⽂件被映射到虚拟内存中,所以在管理⼤⽂件时我们需要在64位模式下运⾏我们的程序,否则将⽆法满⾜我们所需的所有空间。
断点续传(内存映射⽂件)关于涉及到的类以及接⼝在之前⽂章已经叙述,这⾥我们就不再啰嗦,这⾥我们给出下载⽂件的逻辑。
///<summary>///下载⽂件///</summary>///<param name="fileName"></param>///<returns></returns>public HttpResponseMessage GetFile(string fileName){if (!FileProvider.Exists(fileName)){throw new HttpResponseException(HttpStatusCode.NotFound);}long fileLength = FileProvider.GetLength(fileName);var fileInfo = GetFileInfoFromRequest(this.Request, fileLength);.........}我们从请求信息中获取到了⽂件的信息,接下来我们就是利⽤内存映射⽂件的时候MemoryMappedFile.OpenExisting(mapName, MemoryMappedFileRights.Read);⾃定义⼀个映射名称,若此时已存在我们则继续读打开的⽂件,若不存在我们将打开要下载的⽂件并创建内存映射⽂件。
C#实现支持断点续传多线程下载的 Http Web 客户端工具类

Throw,
CancelAll,
Ignore,
Retry
}
/// <summary>
/// 包含 Exception 事件数据的类
/// </summary>
public class ExceptionEventArgs : System.EventArgs
{
private System.Exception _Exception;
private ExceptionActions _ExceptionAction;
private DownLoadState _DownloadState;
public DownLoadState DownloadState
namespace Microshaoft.Utils
{
using System;
using System.IO;
using ;
using System.Text;
using System.Security;
using System.Threading;
{
get
{
return _ExceptionAction;
}
set
{
_ExceptionAction = value;
}
}
internal ExceptionEventArgs(System.Exception e, DownLoadState DownloadState)
this._Position = Position;
this._Data = Data;
this._Length = Length;
C#网络协议题库-简答

C#网络协议题库-简答1. 简答什么是分散式、集中式和分布式通信模型。
答:分散式指用户只负责管理自己的计算机系统,各自独立的系统之间没有资源或信息的交换或共享。
集中式指用一台主计算机保存一个企业组织的全部数据,而用户则通过终端连接到这台主计算机系统并与之通信,从而达到访问数据的目的。
分布式是分散式系统和集中式系统的混合,它由一个又一个连接起来的独立计算机组成。
2.TCP/IP四层模型中各层的主要功能是什么?答:应用层:负责实现一切与应用程序相关的功能,对应OSI参考模型的上三层。
传输层:负责提供可靠的传输服务,对应OSI参考模型的第四层。
网际层:负责网络间的寻址,数据传输,对应OSI参考模型的第三层。
网络接口层:负责实际数据的传输,对应OSI参考模型的下两层。
3. C#中线程优先级有多少种,分别是啥?创建进程时,如果不指定其优先级,则系统默认为什么?答:有5个不同的优先级,由高到低分别是Highest、AboveNormal、Normal、BelowNormal、Lowest。
创建进程时,如果不指定其优先级,则系统默认为Normal。
4.进程和线程有什么区别?答:一个完整的进程拥有自己独立的内存空间和数据,但是线程是共享进程的内存空间和数据。
进程是应用程序的执行实力,线程是执行进程的路径,一个进程可以包含多个线程。
5.在Process类中,Kill方法和CloseMainWindow方法有什么不同?答:Kill方法用于强行终止进程,而CloseMainWindow只是“请求”终止进程。
Kill方法会导致进程非正常终止,因而只在必要时才使用该方法。
CloseMainWindow方法使进程能够有序终止并关闭所有窗口。
如果调用CloseMainWinodw方法失败,则可以使用Kill方法终止进程。
1.网卡的主要工作原理是什么?答:整理计算机上发往网线上的数据,并将数据分解为适当大小的数据包之后向网络上上传。
Internet的应用习题3(带答案)

作业3.FTP、代理服务与网络安全一、填空题1.用户可以通过FTP把远程计算机中的文件复制到本地计算机上,称为下载,也可以把本地计算机中的文件复制到一台远程计算机中,称为上传。
2.FTP也采用了客户/服务器工作模式。
FTP在传输文件时,要在客户程序和服务进程之间建立两个TCP连接,它们分别是控制连接和数据连接。
3.匿名FTP服务器一般支持以anonymous或guest 为用户名,以用户的电子邮件地址为密码的访问。
用户可以通过匿名FTP获取免费软件或共享软件。
4.大多数Web浏览器中都内置了FTP功能,打开浏览器窗口,在地址栏中输人协议名及其FTP服务器地址并回车.,便可进入FTP服务器的树形结构。
5.Telnet采用客户机/服务器的工作模式,在使用Telnet远程登录时需要运行两个程序,一个是运行在远程主机上的远程计算机,另一个是运行在本地计算机上的本地计算机。
6.BBS即电子公告牌系统系统,它的主要功能包括:信息交流、问题解答和电子邮件。
7.通过Internet访问BBS的常用方法有:使用Telnet 访问、使用www 访问。
8.ICQ是英文I SEEK YOU 的简称。
目前,ICQ是人们进行网络聊天的主要方式。
9.IP电话即网络电话,它可以分为:PC到PC 、PC到电话和电话到电话—三种类型。
10.在实际应用时,NetMeeting可以登录上合适的NetMeeting 服务器来寻找朋友,进行链接或者召开网络会议。
11.代理服务器对本地局域网内的计算机而言,它是一台服务器,而对远程目的服务器而言,它又是一台客户端。
12.代理服务器的主要作用是实现局域网对Internet的访问管理,它的基本功能包括以下6个方面:节省IP地址、在内部和外部网络之间构筑防火墙、通过缓存区的使用降低网络通信费用、访问权限控制和信息流量计费管理、对访问内容进行控制和反向代理功能。
13.防火墙的实现技术可以分为报文过渡和应用层网关两类。
断点续传的原理

断点续传的原理断点续传(Resumable Download)是指在文件传输过程中,能够从传输中断的位置继续传输,而不需要重新传输整个文件的技术。
它的实现原理主要涉及到断点记录和范围请求两个方面。
首先,断点记录是指在文件传输过程中记录已经传输的文件片段的大小和位置。
当文件传输被中断时,下一次继续传输时可以通过读取断点记录找到传输的起始位置,并从该位置继续传输。
断点记录可以在客户端或服务端存储,通常使用文件的元数据、特殊文件或数据库记录来保存。
其次,范围请求是指在文件传输过程中,客户端通过发送Range头字段来请求指定文件的某个范围。
服务端收到这个请求后可以根据Range头字段指定的范围将对应的文件内容返回给客户端。
客户端可以在不同时间点多次发送范围请求,以实现断点续传。
断点续传的具体实现可以分为以下几个步骤:1. 客户端发起文件传输请求:客户端向服务端发起文件传输请求,并通过请求头字段Content-Range指定已经传输的文件大小。
如果之前的传输已经被中断,客户端可以通过Content-Range头字段告知服务端已经传输的文件大小。
2. 服务端处理文件传输请求:服务端收到客户端的文件传输请求后,根据请求头字段Content-Range,确定所请求的文件的传输范围。
如果Content-Range 头字段没有提供,服务端可以将整个文件作为范围返回。
然后服务端读取对应范围的文件内容,并通过响应头字段Content-Range来告知客户端返回的文件范围。
3. 客户端接收文件内容:客户端收到服务端返回的文件内容后,将其存储在本地指定的位置,并根据Content-Range响应头字段更新已经传输的文件大小和位置。
如果范围请求仍然没有传输完整个文件,客户端再次发起范围请求来获取剩余的文件内容。
4. 重复步骤2和3:客户端重复执行步骤2和3,直到整个文件传输完成。
每次范围请求都会从上一次传输中断的位置开始继续传输,直到获取全部文件内容。
断点续传 原理

断点续传原理
断点续传是一种在网络传输过程中,出现中断或失败后能够从断点处继续传输的技术。
其基本原理是通过记录已经传输的部分数据和相关信息,以便在重新连接后能够从断点处继续传输而不是重新开始。
在实现断点续传的过程中,首先需要确保数据的传输能够被分片和编号,这样才能准确地确定断点在哪个位置。
传输开始时,接收端会确认接收到的数据,并将确认信息反馈给发送端。
发送端会根据接收端的确认信息,记录已经成功传输的数据并将剩余未传输的数据继续发送。
当网络连接中断时,断点续传技术能够利用记录的传输数据和相关信息来恢复传输。
当重新连接后,发送端可以根据断点的位置继续发送数据,而不需要从头开始发送。
接收端会根据已经传输的数据进行确认,确保没有丢失或重复的数据。
为了实现断点续传,还需要在发送端和接收端之间进行协调和控制。
发送端需要记录已经传输的数据,并能够根据接收端的反馈信息进行恢复。
接收端则需要能够识别断点的位置并通知发送端从断点处继续传输。
断点续传技术能够提高文件传输的稳定性和效率,特别是在大文件传输或网络不稳定的情况下。
通过减少重新传输的时间和网络开销,断点续传能够显著提升传输的速度和可靠性。
断点续传方案

断点续传方案简介断点续传是指在网络传输过程中,当连接中断或者文件传输中止时,能够从中断处重新开始传输,而不是从头开始。
这样可以提高文件传输的可靠性和传输效率。
在实际应用中,断点续传方案常常用于大文件的上传或下载过程中,以确保用户在网络不稳定的情况下能够顺利完成文件传输,而无需重新开始。
本文将介绍几种常见的断点续传方案,并分析各种方案的优缺点,帮助读者选择适合自己应用场景的方案。
方案一:基于HTTP的断点续传HTTP协议是应用层协议中最常用的协议之一,支持断点续传的HTTP服务器通常会在响应头中添加Range字段,用于指定服务器传输的起始位置。
客户端在进行文件下载时,通过设置请求头中的Range字段来请求指定范围的数据。
服务器接收到请求后,根据Range字段返回相应的数据片段。
如果客户端在下载过程中中断,可以通过设置Range字段重新发送请求,从中断处继续下载。
HTTP的断点续传方案具有以下优点:-:基于HTTP的断点续传方案使用标准的HTTP协议,不需要额外的协议和框架支持,方便快捷。
-:基于HTTP的断点续传方案通常兼容多种操作系统和终端设备,使用广泛。
-:通过设置不同的Range字段,可以实现下载指定范围的数据,具有较高的灵活性。
-:HTTP协议本身就具有较高的可靠性,断点续传方案在一定程度上增强了文件传输的可靠性。
然而,基于HTTP的断点续传方案也存在一些局限性:-:由于每次续传都需要从中断处开始,可能会导致重复传输已经传输过的数据,降低传输效率。
-:对于非常大的文件,服务器需要保存大量的中断点信息,占用较多的磁盘空间和内存资源。
-:如果服务器不支持断点续传,那么即使客户端实现了断点续传方案,也无法成功续传。
方案二:基于FTP的断点续传FTP(File Transfer Protocol)是一种文件传输协议,也常用于文件上传和下载。
FTP支持断点续传的机制,能够在网络中断或传输中止后从中断处继续传输。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
如何使用.NET实现断点续传功能
顾名思义,断点续传就是在上一次下载时断开的位置开始继续下载。
在HTTP协议中,可以在请求报文头中加入Range段,来表示客户机希望从何处继续下载。
断点续传的原理
在了解HTTP断点续传的原理之前,先来说说HTTP协议,HTTP协议是一种基于tcp 的简单协议,分为请求和回复两种。
请求协议是由客户机(浏览器)向服务器(WEB SERVER)提交请求时发送报文的协议。
回复协议是由服务器(web server),向客户机(浏览器)回复报文时的协议。
请求和回复协议都由头和体组成。
头和体之间以一行空行为分隔。
以下是一个请求报文与相应的回复报文的例子
以下为引用的内容:
GET /image/index_r4_c1.jpg HTTP/1.1
Accept: */*
Referer: http://192.168.3.120:8080
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.0.3705) Host: 192.168.3.120:8080
Connection: Keep-Alive
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Date: Tue, 24 Jun 2003 05:39:40 GMT
Content-Type: image/jpeg
Accept-Ranges: bytes
Last-Modified: Thu, 23 May 2002 03:05:40 GMT
ETag: "bec48eb862c21:934"
Content-Length: 2827
JFIF H H nbsp; C [1]
….
下面我们就来说说“断点续传”。
顾名思义,断点续传就是在上一次下载时断开的位置开始继续下载。
在HTTP协议中,可以在请求报文头中加入Range段,来表示客户机希望从何处继续下载。
比如说从第1024字节开始下载,请求报文如下:
以下为引用的内容:
GET /image/index_r4_c1.jpg HTTP/1.1
Accept: */*
Referer: http://192.168.3.120:8080
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.0.3705) Host: 192.168.3.120:8080
Range:bytes=1024-
Connection: Keep-Alive
.NET中的相关类
明白了上面的原理,那么,我们来看看。
NET FRAMEWORK中为我们提供了哪些类可以来做这些事。
完成HTTP请求
.HttpWebRequest
HttpWebRequest 类对WebRequest 中定义的属性和方法提供支持,也对使用户能够直接与使用HTTP 的服务器交互的附加属性和方法提供支持。
HttpWebRequest 将发送到Internet 资源的公共HTTP 标头值公开为属性,由方法或系统设置。
下表包含完整列表。
可以将Headers 属性中的其他标头设置为名称/值对。
但是注意,某些公共标头被视为受限制的,它们或者直接由API公开,或者受到系统保护,不能被更改。
Range也属于被保护之列,不过,。
NET为开发者提供了更方便的操作,就是AddRange方法,向请求添加从请求数据的开始处或结束处的特定范围的字节范围标头。
完成文件访问
System.IO.FileStream
FileStream 对象支持使用Seek方法对文件进行随机访问,Seek 允许将读取/写入位置移动到文件中的任意位置。
这是通过字节偏移参考点参数完成的。
字节偏移量是相对于查找参考点而言的,该参考点可以是基础文件的开始、当前位置或结尾,分别由SeekOrigin 类的三个属性表示。
代码实现
了解了。
NET提供的相关的类,那么,我们就可以方便的实现了。
代码如下:
以下为引用的内容:
static void Main(string[] args)
{
string StrFileName="c:\\aa.zip"; //根据实际情况设置
string StrUrl="/xxxxx.zip"; //根据实际情况设置
//打开上次下载的文件或新建文件
long lStartPos =0;
System.IO.FileStream fs;
if (System.IO.File.Exists(StrFileName))
{
fs= System.IO.File.OpenWrite(StrFileName);
lStartPos=fs.Length;
fs.Seek(lStartPos,System.IO.SeekOrigin.Current); //移动文件流中的当前指针
}
else
{
fs = new System.IO.FileStream(StrFileName,System.IO.FileMode.Create);
lStartPos =0;
}
//打开网络连接
try
{
.HttpWebRequest request
=(.HttpWebRequest). HttpWebRequest.Create(StrUrl); if ( lStartPos>0)
request.AddRange((int)lStartPos); //设置Range值
//向服务器请求,获得服务器回应数据流
System.IO.Stream ns= request.GetResponse().GetResponseStream();
byte[] nbytes = new byte[512];
int nReadSize=0;
nReadSize=ns.Read(nbytes,0,512);
while( nReadSize >0)
{
fs.Write(nbytes,0,nReadSize);
nReadSize=ns.Read(nbytes,0,512);
}
fs.Close();
ns.Close();
Console.WriteLine("下载完成");
}
catch(Exception ex)
{
fs.Close();
Console.WriteLine("下载过程中出现错误:"+ex.ToString()); }
}。