计算机科学与技术毕业设计-2.8万字基于.NET的网络下载工具设计与实现.docx
编号:()字号林生毕业设计(论文)题目:基于.NET的网络下载工具设计与实现姓名:XXX学号:08053320班级:计07-X十博一大¥-O一一年六月中国矿业大学本科生毕业论文姓名:XXXX学号:08053320学院:计算机科学与技术专业:计算机科学与技术论文题目:基于.NET的网络下载工具设计与实现专题:指导教师:李政伟职称:副教授2011年6月徐州中国矿业大学毕业论文任务书学院计算机专业年级计05-2学生姓名李闪闪任务下达日期:20XX年XX月XX日毕业论文日期:20XX年XX月XX日至20XX年XX月XX日毕业论文题目:基于.NET的网络下载工具设计与实现毕业论文专题题目:毕业论文主要内容和要求:1 .使用C#语言,在VisualStudio2008.NET平台下进行开发2 .使用.NETFramework3.5类库3 .实现网络远程资源的多线程下载4 .实现断点续传的下载5 .具有良好的用户界面并且界面支持国际化院长签字:指导教师签字:中国矿业大学毕业论文指导教师评阅书指导教师评语(基础理论及基本技能的掌握;独立解决实际问题的能力;研究内容的理论依据和技术方法;取得的主要成果及创新点;工作态度及工作量;总体评价及建议成绩;存在问题;是否同意答辩等):成绩:指导教师签字:中国矿业大学毕业论文评阅教师评阅书评阅教师评语(选题的意义;基础理论及基本技能的掌握;综合运用所学知识解决实际问题的能力;工作量的大小;取得的主要成果及创新点;写作的规范程度;总体评价及建议成绩;存在问题;是否同意答辩等):成绩:评阅教师签字:中国矿业大学毕业论文答辩及综合成绩答辩情况提出问题回答问题正确赫10有一般性1M则性没有答辩委员会评语及建议成绩:答辩委员会主任签字:年月日学院领导小组综合评定成绩:学院领导小组负责人:年月日现代信息技术的发展速度越来越快,每一台计算机工作都或多或少的依赖于计算机网络。而计算机使用网络目的就是获取网络上的资源和信息,而使用资源就需要从网络远程获取资源,如何从远程网络快速的获取大量的网络资源就是本文所要探讨的问题。本软件的主要功能是实现了HTTP资源的断点续传的下载,能够对一个网络资源进行多线程任务下载,实现了用户界面的高度灵活以及国际化的支持。不足之处是只支持了最原始的下载方式,没有对目前主流的BT、P2P下载等做一些支持,同样也不能够像迅雷一样进行自主的资源嗅探。同时本软件支持了软件界面的国际化,可以使用不同的语言作为本软件的界面语言。采用Xml作为记录文件实现了文件的断点续传的下载,同时对于c#对于多线程的支持做了进一步的讨论。同时对一些C#提供的WindoWS控件进行了重载,达到定制控件的效果。关键词:下载;C#;.NET;多线程ABSTRACTTodaythedevelopmentofmoderninformationtechnologyisfasterandfaster,moreorlessdependentoncomputernetworks.Theaimistousenetworkcomputersaccesstonetworkresourcesandinformation,anduseofresourcesontheneedsofremoteaccesstoresourcesfromthenetwork,howfastthenetworkfromaremoteaccesstoalargenumberofnetworkresources,thisarticleistoexploretheissue.TheprimaryfunctionofthissoftwareistoachievetheresourcesHTTPdownload,toanetworkofresourcesformulti-threadeddownloadtaskstoachieveahighlyflexibleuserinterfaceaswellasinternationalsupport.Lackofsupportisonlythemostprimitivewaytodownload,thereisnomainstreamofthecurrentBT,P2Pdownloadingandothersupporttodosomething,thesamecannotbethesameasThunderresourcestocarryouttheirownsnuffer.Andthesoftwaresupportstheinternationalizationofsoftwareinterface,youcanuseadifferentlanguageasthelanguageofthesoftwareinterface.XmlasthelogfileusingaHTTPfiledownload,c#atthesametimeformulti-threadedsupportforfurtherdiscussion.Atthesametime,someC#toprovidecontrolofthewindowshavebeenoverloadedtotheeffectofcustomcontrolsKeywords:Download;C#;.NET;Multithreading1绪论11.1 开发背景11.2 开发意义12系统分析22.1设计概述22.Ll实现目标22.1.2开发环境简介22.2开发相关技术简介42.2.1网络通信技术42.2.2多线程技术82.2.3HTTP和FTP协议92.2.4断点续传技术112.2.5XML及C#对于XML的支持142.2.6C#对于HTTP下载支持142.2.7C#3.O特性一Iinq152.3可行性分析162.3.1技术可行性分析162.3.2经济可行性分析162.3.3操作可行性分析163概要设计173.1勾173.2主要功能流程图173. 3其他主要功能184详细设计194. 1获取网络资源194. 1.1功能说明194.1. 2设计说明194. 2线程任务分配224.2. 1功能说明234.2.2设计说明234.2.3设计流程234.3创建下载任务244.4任务下载244.4.1功能说明254.4.2设计说明254.4.3核心流程254.5事件监听器设计264.5.1功能说明264.5.2事件核心代码274.6下载控制器设计274.6.1功能说明274.6.2主要操作284.6.3功能流程284.7断点记录文件设计284.7.1断点记录文件的设计294.7.2设计说明294.8软件界面国际化支持304.8.1国际化支持流程304.8.2国际化支持设计314.9系统配置334.9.1注册表配置334.9.2XML文件配置344.IOGUI界面设计354. 10.1功能说明354. 10.2设计说明355设计问题总结395. 1断点设置问题395. 2下载速度统计问题395. 3GUI设计问题395. 4其他主要问题40总结41参考文献42翻译部分43英文原文43中文译文51致谢561绪论1.1 开发背景MiCroSOft在推出.NETFramework时推出了C#语言,一种全新的面向对象的语言。C#语言在对于windows应用程序的方面有着良好的支持,用c#编写windowsAPPliCation方便快捷,而且程序的健壮性也很高。C#也从刚开始的1.0到LL2.0,3.0不断的发展强大,到如今的WPF,WCF等等。并且C#语言对于网络也有着良好的支持,HTPP、FTP、TCP、UDP等以及一些更高层更底层的网络协议的支持,所以采用C#作为开发语言是一个不错的选择。随着互联网应用范围不断扩展,网络包含的信息资源日益增多,互联网用户可以通过网络下载所需的数据资源保存在本地磁盘当中,因此相应的基于网络的下载工具应运而生。对于一个网络下载工具,有两个问题一直阻碍着下载技术的发展:速度和下载后的管理。但是伴随着基于网络的多线程下载技术的出现,如今的下载工具彻底摆脱了这两个问题的束缚并且向着更为人性化的方面发展下去。1.2 开发意义本系统是开发一个多线程下载工具,基本实现单个资源的多线程任务下载,同时实现断点续传的功能。相对于目前主流下载工具的实现技术,例如p2p,BT等新的一系列下载技术是本设计是不能相比的。实现这么一个下载工具最大的意义是探索多线程下载的基本原理,断点续传的原理综合运用所学的知识,提高开发者的动手能力,及查阅资料继续学习的能力。本软件的过程中运用了很多c#中比较强大的功能,例如c#对于xml语言的支持,c#序列化的技术,c#对于WindOWS底层的支持,c#网络功能,以及c#3.5所支持的LINQ,语言级集成查询(LangUageINtegratedQuery),加深开发者对于c#语言和相对应技术的学习,也满足了开发者对于c#APPliCation的追求。2系统分析2.1 设计概述2.1.1 实现目标对于一个多线程下载工具的设计,首先就是要设定好实现的目标,确定开发的环境。有个合理的设计目标使得在设计过程中就不会茫然,思路更清晰,编码就不用花费太多的时间。而一个好的前期设计和一个开发环境对提高开发的效率起着很重要的作用。实现一个实用的多任务,多线程下载工具。具备以下功能:1)实现一个简洁的易操作的GUl界面;2)实现新建下载任务的功能;3)下载过程实现多任务,多线程的功能;4)实现任务暂停,及恢复下载的功能;5)实现停止任务功能;6)软件在下载过程中关闭,打开后重新开始下载;7)任务异常终止或不能下载时给予相关提示和进行一些相应的处理;8)以及一些断点续传下载软件常见的功能。2.1.2 开发环境简介MicrosoftVisualStudio2008简介MicrosoftVisualStudio2008使开发人员能够快速创建高质量、用户体验丰富而又紧密联系的应用程序,充分展示了Microsoft开发智能客户端应用程序的构想。借助VisualStudio2008,采集和分析信息将变得更为简单便捷,业务决策也会因此变得更为有效。任何规模的组织都可以使用VisualStudio2008快速创建能够利用WindowsVista和2007Officesystem的更安全、更易于管理并且更可靠的应用程序。使用MiCrOSoft.NETFramework3.5.NETFramework提供了用于解决常见编程任务的构建基块(预制的软件),从而能够快速构造具有出色的最终用户体验的紧密联系的应用程序。在.NETFramework模型业务流程上有效构建的紧密联系的应用程序有利于在异类环境中实现系统集成。VisualStudio和.NETFramework的结合使用减少了对公用管道代码的需要,从而缩短了开发时间并使开发人员能够集中精力解决业务问题。.NETFramework3.5是在.NETFramework3.0的基础上构建的更高版本。得到增强的功能领域包括基类库、Windowsworkflowfoundation、WindowsCommunicationFoundation、WindowsPresentationFoundation和WindowsCardSpace0开发人员使用VisualStudio2008专业版能够:集成的单元测试能够更有效的验证应用程序。应用程序的单元测试能够帮助我们在开发过程的早期轻松发现大量的问题。现在,VisualStudio2008专业版中集成了单元测试功能,以前这个功能只在VisualStudioTeamSystem产品中提供。使用MicrosoftOffice系统开发用户熟悉的应用程序。Visualstudio2008专业版现在包括了VisualStudioToolsForOffice,这意味着我们的应用程序能够轻松融合世界上最流行的软件产品MicrosoftOfficeSystem0比如,开发人员能够直接将ERP的信息集成到OfficeOutlook的任务面板,这样用户就能够更轻松的访问到商务决策。让您的用户能够使用到WindowsMobile的应用程序。VisualStudio2008专业版让Mobile应用程序的开发变得更加简单。全新的设备仿真器能够自动化测试场景,让您在近似于真实环境中进行应用程序的开发,比如:信号衰弱或电量不足。Mobile开发人员能够充分利用到一些更高级的特性,比如:LINQ和单元测试。开发人员现在能够扩展和整合用户体验,将丰富的多媒体用户体验发布到任何能够访问Internet的设备上。系统要求D支持的体系结构x86x64(WOW)2)支持的操作系统MicrosoftWindowsXPMicrosoftWindowsServer2003ServicePack2MicrosoftWindowsServer2008WindowsVista3)硬件要求最低要求:1.6GHzCPU,192MB内存,1024x768显示器,5400RPM硬盘建议配置:2.2GHZ或更快的CPU,384MB或更大的内存,1280x1024显示器,7200RPM或更快的硬盘在WindoWSVista±:2.4GHzCPU,768MB内存完全安装需要1.3GB可用磁盘空间2.2开发相关技术简介2.2.1 网络通信技术网络通信协议、接口和服务概述1)协议网络设计体系中的个体(每一台host),形象地理解为都包含一个“一堆相互叠加的层”。当两台在同一个网络设计体系中的主机要进行相互通信时,即一台机器上的第n层要与另一台机器上的第n层交流,在计算机对话中用到的规则和约定合起来称为第n层的协议(protocol)。就像人与人之间相互交流是需要遵循一定的规矩一样,计算机之间的相互通信需要共同遵守一定的规律原则,这些规则就称为网络协议。常见的协议有TCP/IP(传输控制协议/网际协议)、IPX/SPX、NetBEUI等。在局域网中用得比较多的是IPXSPX0用户如果访问Inte门et,则必须在网络协议中添加TCP/IP。2)接口两台主机之间通信的传输数据不是从一台计算机上直接传递到另一台计算机上的同一层中,虽然在我们平时的印象中,计算机在执行网络通信时确实是采用“直接”的方式,但事实上,这只是给我们的“虚拟”印象。事实上,每一个网络层都将数据的控制信息传递到它的下一层,这样一直传递到最底下的一层。最底下的一层的传递数据的介质,即物理介质,如光缆,通过它我们才可以进行实际的通信。网络系统的每一个实体中,联系相邻两层的通路就是接口(interface)o在接口的规范里,定义了下层向上层提供哪些网络服务和操作。图2-1网络分层结构图3)服务从实现的细节来看,下层向上层提供的服务分为两种形式:面向连接的服务和无连接的服务。面向连接的服务是一种基于电话模型的服务。在连接过程中,必须要经过三个步骤来完成数据通信、建立连接、使用连接、释放连接的工作。如下图演示了面向连接服务的通信模型。无连接的服务是一种基于邮政系统的模型。用户所发送的数据被分成相应的份数,每一条报文都携有完整的目标地址。其特点是每一条报文都相对独立,系统独立地进行路由。各个报文到达目的地的顺序可能是乱序。如下图所示的为无连接服务的通信模型。图2-3无连接服务模型事实上,“有连接”的服务方式需要一定的代价来维护这条“通信信道”,所以,它比“无连接”的服务方式要耗费更多的网络通信资源。虽然它能提高通信数据传输的可靠性,但如果在“需重点考虑通信代价”的在线游戏数据传输的应用程序里,“无连接”服务方式的可行度就要比“有连接”的好。TCP/IP网络架构概述TCP/IP是一种网络通信协议,优点在于规范了网络上的所有通信设备,尤其是一个主机与另一个主机之间的数据往来格式以及传送方式。TCP/IP是IntenWt的基础协议,也是电脑数据打包和寻址的标准设备。在数据传送中,可以形象地理解为有两个信封,TCP和IP就像是信封,要传递的信息被划分成若干段,每一段塞入一个TCP信封,并在该信封面上记录有分段号的信息,再将TCP信封塞入IP大信封,发送上网。而在接收端,一个TCP软件包负责收集信封,抽出数据,把这些数据按发送前的顺序还原,并加以校验,若发现差错,根据协议,接收端会发出“重发该数据”的请求。因此,TCP/IP在Internet中几乎可以无差错地传送数据。如下图所示为TCP/IP参考模型。SMTP,DNS,FTP,Telnet图2-4TCP/IP网络分层示意图从上图来看,网络接口层是TCP/IP模型的底层。它的功能是控制网络硬件,并发送IP数据报。实际上,网络接口层可以用来管理网络介质里的诸多协议,定义如何使用实际网络来传送数据。互联网层是将整个网络体系结构贯穿在一起的关键层,它负责提供基本的封包传送功能,将信息分组传送到目标端,各个分组相互独立。互联网层定义了正式的分组格式和协议,就是我们所说的IPo传输层是提供对等实体件的数据传送服务,确定数据已被送达并接受。主要的协议有传输控制协议(TCP)和用户数据报协议(UDP)0应用层是应用程序件沟通的协议,包括所有的高层协议。从使用的角度来看,高层协议包含虚拟终端协议(TeInet)、文本传输协议(FTP)、电子邮件协议(SMTP)、现在的DNS域名系统、HTTP超文本传输协议等。这些协议和实际应用密切相关。IP地址与端口IP地址是网络上标识主机的编号。而所谓的端口号则标识的是哪一个具体的应用程序。1)IP地址IP地址包括网络号和主机号,网络号和主机号是IP地址唯一的组合。IP地址由4部分数字组成,每部分数字对应8位二进制数字,各部分之间用小数点分开。同一个物理网络上的所有主机都用同一个网络标识,网络上的一个主机(包括网络上工作站、服务器和路由器等)都是一个主机标识与其对应的IP地址。IP地址的4个字节划分为2部分,一部分用以表明具体的网络段,即网络号;另一部分用以表明具体的节点,即主机号。根据每个网络中所包含的主机的多少,有的网络可能含有较多的计算机,也有的网络包含较少的计算机。按照网络规模的大小,为了便于寻址和层次化的构造网络,IP地址被分为A、B、C、D、E五类。如下图所示为IP地址分类图。A类B类C类D类E类端口2)端口是通过端口号来唯一标记的,端口号只有整数,它的范围是0飞5535。一台拥有IP地址的主机可以提供许多服务,如Web服务、FTP服务、SMTP服务等,这些服务完全可以通过一个IP地址来实现。那么,这么多网络服务主机怎样才能区别开呢?显然不能只靠IP地址,因为IP地址与网络服务的关系是一对多的关系。实际上是通过“IP地址+端口号”来区分不同的服务的。逻辑意义上的端口号有多种分类标准,按对应的协议类型,端口有两种:TCP端口和UDP端口。由于TCP和UDP两个协议是独立的,因此各自的端口号也相互独立。例如,TCP有256端口,UDP也可以有256端口,两者并不冲突。2.2.2多线程技术多线程概念多线程是为了使得多个线程并行的工作以完成多项任务,以提高系统的效率。线程是在同一时间需要完成多项任务的时候被实现的。使用线程的好处有以下几点:1)使用线程可以把占据长时间的程序中的任务放到后台去处理2)用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出个进度条来显示处理的进度3)程序的运行速度可能加快4)在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比-较有利了。在这种情况下我们可以释放一些珍贵的资源如内存占用等等。多线程在.NET里如何工作在本质上和结构来说,.NET是一个多线程的环境。有两种主要的多线程方法是NET所提倡:使用ThreadStart来开始你自己的进程,直接的(使用ThreadPool.QueueUserWorkItern)或者间接的(比如Stream.BeginRead,或者调用BeginInvoke)使用ThreadPOol类。一般来说,你可以手动”为长时间运行的任务创建一个新的线程,另外对于短时间运行的任务尤其是经常需要开始的那些,进程池是一个非常好的选择。进程池可以同时运行多个任务,还可以使用框架类。对于资源紧缺需要进行同步的情况来说,它可以限制某一时刻只允许一个线程访问资源。这种情况可以视为给线程实现了锁机制。线程的基类是SyStem.Threading。所有线程通过CLl来进行管理。1)创建线程:创建一个新的Thread对象的实例。Thread的构造函数接受一个参数:ThreadDummyThread=newThread(newThreadStart(dummyFunction);2)执行线程:使用Threading命名空间里的start方法来运行线程:DummyThread.Start();3)组合线程:经常会出现需要组合多个线程的情况,就是当某个线程需要其他线程的结束来完成自己的任务。假设DummyThread必须等待DummyPriorityThread来完成自己的任务,我们只需要这样做:DummyPriorityThread.JoinO;4)暂停线程:使得线程暂停给定的秒:DummyPriorityThread.Sleep(<TimeinSecond>);5)中止线程:如果需要中止线程可以使用如下的代码:DummyPriorityThread.Abort();6)使用Interlock:C#提供了一个特殊的类叫做interlocked,就是提供了锁机制的实现,我们可以加入如下的代码实现锁机制:Interlocked.SomeFunction(refcounter);7)使用锁:这是为了锁定代码关键区域以进行同步,锁定代码如下:lock(this)Somestatements;8)使用Monitor:当有需要进行线程管理的时候我们可以使用:Monitor.Enter(this);2.2.3 HTTP和FTP协议HTTP协议HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,关于HnP协议的详细内容请参考RFC2616。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求,请求头包含请求的方法、URL、协议版本、以及包含请求修饰符、客户信息和内容的类似于MlME的消息结构。服务器以一个状态行作为响应,相应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以及可能的实体内容。通常HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息。这两种类型的消息由一个起始行,一个或者多个头域,一个指示头域结束的空行和可选的消息体组成。HTTP的头域包括通用头,请求头,响应头和实体头四个部分。每个头域由一个域名,冒号(:)和域值三部分组成。域名是大小写无关的,域值前可以添加任何数量的空格符,头域可以被扩展为多行,在每行开始处,使用至少一个空格或制表符。HTTP协议结构如下:HTTP报文由从客户机到服务器的请求和从服务器到客户机的响应构成。请求报文格式如下:请求行一通用信息头一请求头一实体头一报文主体。请求行以方法字段开始,后面分别是URL字段和HTTP协议版本字段,并以CRLF结尾。SP是分隔符。除了在最后的CRLF序列中CF和LF是必需的之外,其他都可以不要。有关通用信息头,请求头和实体头方面的具体内容可以参照相关文件。应报文格式如下:状态行一通用信息头一响应头一实体头一报文主体。状态码元由3位数字组成,表示请求是否被理解或被满足。原因分析是对原文的状态码作简短的描述,状态码用来支持自动操作,而原因分析用来供用户使用。客户机无需用来检查或显示语法。有关通用信息头,响应头和实体头方面的具体内容可以参照相关文件。FTP协议FTP(FileTransferProtocol),是文件传输协议的简称。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(pplication)o用户可以通过它把自己的PC机与世界各地所有运行FTP协议的服务器相连,访问服务器上的大量程序和信息。FTP的主要作用,就是让用户连接上一个远程计算机(这些计算机上运行着FTP服务器程序)察看远程计算机有哪些文件,然后把文件从远程计算机上拷到本地计算机,或把本地计算机的文件送到远程计算机去。一般来说,用户联网的首要目的就是实现信息共享,文件传输是信息共享非常重要的一个内容之一。早起在Internet上实现文件传输,并不是一件容易的事,我们知道Internet是一个非常复杂的计算机环境,有PC,有工作站,有MAC,有大型机,据统计连接在Internet上的计算机已有上千万台,而这些计算机可能运行不同的操作系统,有运行UniX的服务器,也有运行Dos、WindowS的PC机和运行MacOS的苹果机等等,而各种操作系统之间的文件交流问题,需要建立一个统一的文件传输协议,这就是所谓的FTP。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议,这样用户就可以把自己的文件传送给别人,或者从其它的用户环境中获得文件。与大多数Internet服务一样,FTP也是一个客户机/服务器系统。用户通过一个支持FTP协议的客户机程序,连接到在远程主机上的FTP服务器程序。用户通过客户机程序向服务器程序发出命令,服务器程序执行用户所发出的命令,并将执行的结果返回到客户机。比如说,用户发出一条命令,要求服务器向用户传送某一个文件的一份拷贝,服务器会响应这条命令,将指定文件送至用户的机器上。客户机程序代表用户接收到这个文件,将其存放在用户目录中。在FTP的使用当中,用户经常遇到两个概念:下载(DoWnIOad)和上载(UPlOad)。下载文件就是从远程主机拷贝文件至自己的计算机上;上载文件就是将文件从自己的计算机中拷贝至远程主机上。用Internet语言来说,用户可通过客户机程序向(从)远程主机上载(下载)文件。2.2.4 断点续传技术在当今的网络时代,下载软件是使用最为频繁的软件之一。几年来,下载技术也在不停地发展。最原始的下载功能仅仅是个“下载过程”,即从WEB服务器上连续地读取文件。其最大的问题是,由于网络的不稳定性,一旦连接断开使得下载过程中断,就不得不全部从头再来一次。随后,“断点续传”的概念就出来了,顾名思义,就是如果下载中断,在重新建立连接后,跳过已经下载的部分,而只下载还没有下载的部分。多线程下载的基础是WEB服务器支持远程的随机读取,也即支持“断点续传二这样,在下载时可以把文件分成若干部分,每一部分创建一个下载线程进行下载。不仅在关机或者网络出错的情况下这项技术。HTTP断点续传支持对于HTTP协议,向服务器请求某个文件时,只要发送类似如下的请求即可:GET/PathZFileNameHTTP/1.0Host:www.server,com:80Accept:*User-Agent:GeneralDown1oadApp1icationConnection:close每行用一个“回车换行”分隔,末尾再追加一个“回车换行”作为整个请求的结束。第一行中的GET是HTTP协议支持的方法之一,方法名是大小写敏感的,HTTP协议还支持OPTlONS、HAED.POST、PUT、DELETE、TRCE>CoNNECT等方法,而GET和HEAD这两个方法通常被认为是“安全的”,也就是说任何实现了HTTP协议的服务器程序都会实现这两个方法。对于文件下载功能,GET足臭。GET后面是一个空格,其后紧跟的是要下载的文件从WEB服务器根开始的绝对路径。该路径后又有一个空格,然后是协议名称及协议版本。除第一行以外,其余行都是HTTP头的字段部分。HoSt字段表示主机名和端口号,如果端口号是默认的80则可以不写。Accept字段中的*/*表示接收任何类型的数据。USeLAgent表示用户代理,这个字段可有可无,但强烈建议加上,因为它是服务器统计、追踪以及识别客户端的依据。Connection字段中的ClOSe表示使用非持久连接。关于HTTP协议更多的细节可以参考RFC2616(HTTP1.D0如果服务器成功收到该请求,并且没有出现任何错误,则会返回类似下面的数据:HTTP/1.0200OKContent-Length:13057672Content-Type:application/octet-stream1.ast-Modified:Wed,10Oct200500:56:34GMTAccept-Ranges:bytesETag:zz2f38a6cac7cec51:160c”Server:Microsoft-IIS/6.0X-Powered-By:ASP.NETDate:Wed,16Nov200501:57:54GMTConnection:close第一行是协议名称及版本号,空格后面会有一个三位数的数字,是HTTP协议的响应状态码,200表示成功,OK是对状态码的简短文字描述。状态码共有5类:IXX属于通知类;2xx属于成功类;3xx属于重定向类;4xx属于客户端错误类;5xx属于服务端错误类。对于状态码,相信大家对404应该很熟悉,如果向一个服务器请求一个不存在的文件,就会得到该错误,通常浏览器也会显示类似“HTTP404-未找到文件”这样的错误。COntenLLength字段是一个比较重要的字段,它标明了服务器返回数据的长度,这个长度是不包含HTTP头长度的。换句话说,我们的请求中并没有Range字段(后面会说到),表示我们请求的是整个文件,所以Content-Length就是整个文件的大小。其余各字段是一些关于文件和服务器的属性信息。这段返回数据同样是以最后一行的结束标志(回车换行)和一个额外的回车换行作为结束,即“rnrn"。而“rnrn”后面紧接的就是文件的内容了,这样我们就可以找到“rnrn",并从它后面的第一个字节开始,源源不断的读取,再写到文件中了。以上就是通过HTTP协议实现文件下载的全过程。但还不能实现断点续传,而实际上断点续传的实现非常简单,只要在请求中加一个Range字段就可以了。假如一个文件有1000个字节,那么其范围就是0-999,则:Range:bytes=500-表示读取该文件的500-999字节,共500字节。Range:bytes=500-599表示读取该文件的500-599字节,共100字节。Range还有其它几种写法,但上面这两种是最常用的。如果HTTP请求中包含Range字段,那么服务器会返回206(PartialContent),同时HTTP头中也会有一个相应的Content-Range字段,类似下面的格式:Content-Range:bytes5009991000Content-Range字段说明服务器返回了文件的某个范围及文件的总长度。这时Content-Length字段就不是整个文件的大小了,而是对应文件这个范围的字节数,这一点一定要注意。一切好像基本上没有什么问题了,但事实并非如此。如果我们请求的文件的URL是类似httpwvw.server,com/fiIename.exe这样的文件,则不会有问题。但是很多软件下载网站的文件下载链接都是通过程序重定向的,比如pchome的ACDSee的HTTP下载地址是:http:/download,这种地址并没有直接标识文件的位置,而是通过程序进行了重定向。如果向服务器请求这样的URL,服务器就会返回302(MovedTemporarily),意思就是需要重定向,同时在HTTP头中会包含一个LOCatiOn字段,Location字段的值就是重定向后的目的URL。这时就需要断开当前的连接,而向这个重定向后的服务器发请求。FTP断点续传支持FTP客户端软件断点续传指的是在下载或上传时,将下载或上传任务(一个文件或一个压缩包)人为的划分为几个部分,每一个部分采用一个线程进行上传或下载,如果碰到网络故障,可以从已经上传或下载的部分开始继续上传下载以后未上传下载的部分,而没有必要重头开始上传下载。用途可以节省时间,提高速度。有时用户上传下载文件需要历时数小时,万一线路中断,不具备断点续传的FTP服务器或下载软件就只能从头重传;比较好的FTP服务器或下载软件具有FTP断点续传能力,允许用户从上传下载断线的地方继续传动,这样大大减少了用户的烦恼。2.2.5 XML及C#对于XML的支持XML(ExtensibleMarkupLanguage)即可扩展标记语言,它与HTML一样,都是SGML(StandardGeneralizedMarkupLanguage,标准通用标记语言)。Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具。扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用。运用XML文件作为本系统的配置文件以及国际化文件,使得更改和读取软件配置更加方便和快捷,XML文件也具有良好的可读性,所以在本软件的开发中XML类型的文件作为配置、数据、记录文件等多处被使用。C#对于XML文件的支持是通过System.Xml(System.XML.dll)命名空间中的许多类来支持的,可以通过C#简单方便的读写XML格式的文件。C#中主要有XmlNode>XmlDocumentXmlElement>XmlAttribute>XmlText>XmIComment>XmlNodeList等几个类支持对于xml文件的多种操作。使用这些类中提供的方法可以简单方便的读写Xml文件。2.2.6 C#对于HTTP下载支持HTTP亦即HyperTextTransferProtocol的缩写,它是现代互联网上最重要的一种网络协议,超文本传输协议位于TCP/IP协议的应用层,是一个面向无连接、简单、快速的C/S结构的协议。HTTP的工作过程大体上分连接、请求