




已阅读5页,还剩53页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于基于 NET NET 的网络下载工具设计与实现毕业论文的网络下载工具设计与实现毕业论文 目目 录录 1 1 绪论绪论 1 1 1 1 开发背景 1 1 2 开发意义 1 2 2 系统分析系统分析 2 2 2 1 设计概述 2 2 1 1 实现目标 2 2 1 2 开发环境简介 2 2 2 开发相关技术简介 4 2 2 1 网络通信技术 4 2 2 2 多线程技术 8 2 2 3HTTP 和 FTP 协议 9 2 2 4 断点续传技术 11 2 2 5XML 及 C 对于 XML 的支持 13 2 2 6C 对于 HTTP 下载支持 14 2 2 7C 3 0 特性 linq 15 2 3 可行性分析 15 2 3 1 技术可行性分析 16 2 3 2 经济可行性分析 16 2 3 3 操作可行性分析 16 3 3 概要设计概要设计 1717 3 1 系统结构图 17 3 2 主要功能流程图 17 3 3 其他主要功能 18 4 4 详细设计详细设计 1919 4 1 获取网络资源 19 4 1 1 功能说明 19 4 1 2 设计说明 19 4 2 线程任务分配 22 4 2 1 功能说明 22 4 2 2 设计说明 22 4 2 3 设计流程 23 4 3 创建下载任务 24 4 4 任务下载 24 4 4 1 功能说明 24 4 4 2 设计说明 25 4 4 3 核心流程 25 4 5 事件监听器设计 26 4 5 1 功能说明 26 4 5 2 事件核心代码 27 4 6 下载控制器设计 27 4 6 1 功能说明 27 4 6 2 主要操作 28 4 6 3 功能流程 28 4 7 断点记录文件设计 28 4 7 1 断点记录文件的设计 28 4 7 2 设计说明 29 4 8 软件界面国际化支持 30 4 8 1 国际化支持流程 30 4 8 2 国际化支持设计 30 4 9 系统配置 33 4 9 1 注册表配置 33 4 9 2XML 文件配置 34 4 10GUI 界面设计 34 4 10 1 功能说明 34 4 10 2 设计说明 35 5 5 设计问题总结设计问题总结 3838 5 1 断点设置问题 38 5 2 下载速度统计问题 38 5 3 GUI 设计问题 38 5 4 其他主要问题 38 总结总结 4040 参考文献参考文献 4141 翻译部分翻译部分 4242 英文原文英文原文 42 中文译文中文译文 50 致致 谢谢 5555 中国矿业大学 2011 届本科生毕业设计 论文 第 0 页 1 绪论 1 1 开发背景 Microsoft 在推出 NET Framework 时推出了 C 语言 一种全新的面向对象的 语言 C 语言在对于 windows 应用程序的方面有着良好的支持 用 c 编写 windows Application 方便快捷 而且程序的健壮性也很高 C 也从刚开始的 1 0 到 1 1 2 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 语言级集成查询 Language INtegrated Query 加深开发者对于 c 语言和相对应技术的学习 也满足了开发者对于 c Application 的追求 中国矿业大学 2011 届本科生毕业设计 论文 第 1 页 2 系统分析 2 1设计概述 2 1 1实现目标实现目标 对于一个多线程下载工具的设计 首先就是要设定好实现的目标 确定开发 的环境 有个合理的设计目标使得在设计过程中就不会茫然 思路更清晰 编码 就不用花费太多的时间 而一个好的前期设计和一个开发环境对提高开发的效率 起着很重要的作用 实现一个实用的多任务 多线程下载工具 具备以下功能 1 实现一个简洁的易操作的 GUI 界面 2 实现新建下载任务的功能 3 下载过程实现多任务 多线程的功能 4 实现任务暂停 及恢复下载的功能 5 实现停止任务功能 6 软件在下载过程中关闭 打开后重新开始下载 7 任务异常终止或不能下载时给予相关提示和进行一些相应的处理 8 以及一些断点续传下载软件常见的功能 2 1 2开发环境简介开发环境简介 Microsoft Visual Studio 2008 简介 Microsoft Visual Studio 2008 使开发人员能够快速创建高质量 用户体验 丰富而又紧密联系的应用程序 充分展示了 Microsoft 开发智能客户端应用程序 的构想 借助 Visual Studio 2008 采集和分析信息将变得更为简单便捷 业务 决策也会因此变得更为有效 任何规模的组织都可以使用 Visual Studio 2008 快速创建能够利用 Windows Vista 和 2007 Office system 的更安全 更易于 管理并且更可靠的应用程序 使用 Microsoft NET Framework 3 5 NET Framework 提供了用于解决常见编程任务的构建基块 预制的软件 从而能够快速构造具有出色的最终用户体验的紧密联系的应用程序 在 NET Framework 模型业务流程上有效构建的紧密联系的应用程序有利于在异类环境中 实现系统集成 Visual Studio 和 NET Framework 的结合使用减少了对公用管道代码的需 要 从而缩短了开发时间并使开发人员能够集中精力解决业务问题 中国矿业大学 2011 届本科生毕业设计 论文 第 2 页 NET Framework 3 5 是在 NET Framework 3 0 的基础上构建的更高版本 得到增强的功能领域包括基类库 Windows workflow foundation Windows Communication Foundation Windows Presentation Foundation 和 Windows CardSpace 开发人员使用 Visual Studio 2008 专业版能够 集成的单元测试能够更有 效的验证应用程序 应用程序的单元测试能够帮助我们在开发过程的早期轻松发 现大量的问题 现在 Visual Studio 2008 专业版中集成了单元测试功能 以前 这个功能只在 Visual Studio Team System 产品中提供 使用 Microsoft Office 系统开发用户熟悉的应用程序 Visual studio 2008 专业版现在包括了 Visual Studio Tools For Office 这意味着我们的应 用程序能够轻松融合世界上最流行的软件产品 Microsoft Office System 比如 开发人员能够直接将 ERP 的信息集成到 Office Outlook 的任务 面板 这样用户就能够更轻松的访问到商务决策 让您的用户能够使用到 Windows Mobile 的应用程序 Visual Studio 2008 专业版让 Mobile 应用程序的开发变得更加简单 全新的设备仿真器能够自动化 测试场景 让您在近似于真实环境中进行应用程序的开发 比如 信号衰弱或电 量不足 Mobile 开发人员能够充分利用到一些更高级的特性 比如 LINQ 和单 元测试 开发人员现在能够扩展和整合用户体验 将丰富的多媒体用户体验发布 到任何能够访问 Internet 的设备上 系统要求 1 支持的体系结构 x86 x64 WOW 2 支持的操作系统 Microsoft Windows XP Microsoft Windows Server 2003 Service Pack 2 Microsoft Windows Server 2008 Windows Vista 3 硬件要求 最低要求 1 6GHz CPU 192 MB 内存 1024x768 显示器 5400 RPM 硬盘 建议配置 2 2GHz 或更快的 CPU 384 MB 或更大的内存 1280 x1024 显示器 7200 RPM 或更快的硬盘 在 Windows Vista 上 2 4 GHz CPU 768 MB 内存 完全安装需要 1 3 GB 可用磁盘空间 中国矿业大学 2011 届本科生毕业设计 论文 第 3 页 2 2开发相关技术简介 2 2 1网络通信技术网络通信技术 网络通信协议 接口和服务概述 1 协议 网络设计体系中的个体 每一台 host 形象地理解为都包含一个 一堆相互 叠加的层 当两台在同一个网络设计体系中的主机要进行相互通信时 即一台机器上的 第 n 层要与另一台机器上的第 n 层交流 在计算机对话中用到的规则和约定合起 来称为第 n 层的协议 protocol 就像人与人之间相互交流是需要遵循一定的规矩一样 计算机之间的相互通 信需要共同遵守一定的规律原则 这些规则就称为网络协议 常见的协议有 TCP IP 传输控制协议 网际协议 IPX SPX NetBEUI 等 在局域网中用得比较 多的是 IPX SPX 用户如果访问 Internet 则必须在网络协议中添加 TCP IP 2 接口 两台主机之间通信的传输数据不是从一台计算机上直接传递到另一台计算机 上的同一层中 虽然在我们平时的印象中 计算机在执行网络通信时确实是采用 直接 的方式 但事实上 这只是给我们的 虚拟 印象 事实上 每一个网络层都将数据的控制信息传递到它的下一层 这样一直传 递到最底下的一层 最底下的一层的传递数据的介质 即物理介质 如光缆 通 过它我们才可以进行实际的通信 网络系统的每一个实体中 联系相邻两层的通路就是接口 interface 在 接口的规范里 定义了下层向上层提供哪些网络服务和操作 中国矿业大学 2011 届本科生毕业设计 论文 第 4 页 第5层 第4层 第3层 第2层 第1层 第5层 第4层 第3层 第2层 第1层 物理介质 图 2 1 网络分层结构图 3 服务 从实现的细节来看 下层向上层提供的服务分为两种形式 面向连接的服务 和无连接的服务 面向连接的服务是一种基于电话模型的服务 在连接过程中 必须要经过三 个步骤来完成数据通信 建立连接 使用连接 释放连接的工作 如下图演示了 面向连接服务的通信模型 图 2 2 面向连接服务模型 无连接的服务是一种基于邮政系统的模型 用户所发送的数据被分成相应的 份数 每一条报文都携有完整的目标地址 其特点是每一条报文都相对独立 系 统独立地进行路由 各个报文到达目的地的顺序可能是乱序 如下图所示的为无连接服务的通信模型 中国矿业大学 2011 届本科生毕业设计 论文 第 5 页 图 2 3 无连接服务模型 事实上 有连接 的服务方式需要一定的代价来维护这条 通信信道 所 以 它比 无连接 的服务方式要耗费更多的网络通信资源 虽然它能提高通信 数据传输的可靠性 但如果在 需重点考虑通信代价 的在线游戏数据传输的应 用程序里 无连接 服务方式的可行度就要比 有连接 的好 TCP IP 网络架构概述 TCP IP 是一种网络通信协议 优点在于规范了网络上的所有通信设备 尤其 是一个主机与另一个主机之间的数据往来格式以及传送方式 TCP IP 是 Internet 的基础协议 也是电脑数据打包和寻址的标准设备 在数 据传送中 可以形象地理解为有两个信封 TCP 和 IP 就像是信封 要传递的信息 被划分成若干段 每一段塞入一个 TCP 信封 并在该信封面上记录有分段号的信 息 再将 TCP 信封塞入 IP 大信封 发送上网 而在接收端 一个 TCP 软件包负责收集信封 抽出数据 把这些数据按发送 前的顺序还原 并加以校验 若发现差错 根据协议 接收端会发出 重发该数 据 的请求 因此 TCP IP 在 Internet 中几乎可以无差错地传送数据 如下图所 示为 TCP IP 参考模型 中国矿业大学 2011 届本科生毕业设计 论文 第 6 页 应用层 传输层 互联网层 网络接口层 SMTP DNS FTP Telnet TCP IP 图 2 4TCP IP 网络分层示意图 从上图来看 网络接口层是 TCP IP 模型的底层 它的功能是控制网络硬件 并发送 IP 数据报 实际上 网络接口层可以用来管理网络介质里的诸多协议 定义如何使用实 际网络来传送数据 互联网层是将整个网络体系结构贯穿在一起的关键层 它负责提供基本的封 包传送功能 将信息分组传送到目标端 各个分组相互独立 互联网层定义了正 式的分组格式和协议 就是我们所说的 IP 传输层是提供对等实体件的数据传送服务 确定数据已被送达并接受 主要 的协议有传输控制协议 TCP 和用户数据报协议 UDP 应用层是应用程序件沟通的协议 包括所有的高层协议 从使用的角度来看 高层协议包含虚拟终端协议 Telnet 文本传输协议 FTP 电子邮件协议 SMTP 现在的 DNS 域名系统 HTTP 超文本传输协议等 这些协议和实际应用密 切相关 IP 地址与端口 IP 地址是网络上标识主机的编号 而所谓的端口号则标识的是哪一个具体的 应用程序 1 IP 地址 IP 地址包括网络号和主机号 网络号和主机号是 IP 地址唯一的组合 IP 地 址由 4 部分数字组成 每部分数字对应 8 位二进制数字 各部分之间用小数点分 开 同一个物理网络上的所有主机都用同一个网络标识 网络上的一个主机 包 括网络上工作站 服务器和路由器等 都是一个主机标识与其对应的 IP 地址 IP 地址的 4 个字节划分为 2 部分 一部分用以表明具体的网络段 即网络号 另一 中国矿业大学 2011 届本科生毕业设计 论文 第 7 页 部分用以表明具体的节点 即主机号 根据每个网络中所包含的主机的多少 有的网络可能含有较多的计算机 也 有的网络包含较少的计算机 按照网络规模的大小 为了便于寻址和层次化的构 造网络 IP 地址被分为 A B C D E 五类 如下图所示为 IP 地址分类图 A类 B类 C类 D类 E类 081631 前缀 前缀 前缀后缀 后缀 后缀 多址传送地址 保留将来使用 0 10 110 1110 1110 图 2 5IPv4 地址分段分割图 2 端口 端口是通过端口号来唯一标记的 端口号只有整数 它的范围是 0 65535 一台拥有 IP 地址的主机可以提供许多服务 如 Web 服务 FTP 服务 SMTP 服 务等 这些服务完全可以通过一个 IP 地址来实现 那么 这么多网络服务主机怎 样才能区别开呢 显然不能只靠 IP 地址 因为 IP 地址与网络服务的关系是一对 多的关系 实际上是通过 IP 地址 端口号 来区分不同的服务的 逻辑意义上的端口号有多种分类标准 按对应的协议类型 端口有两种 TCP 端口和 UDP 端口 由于 TCP 和 UDP 两个协议是独立的 因此各自的端口号也相互 独立 例如 TCP 有 256 端口 UDP 也可以有 256 端口 两者并不冲突 2 2 2多线程技术多线程技术 多线程概念 多线程是为了使得多个线程并行的工作以完成多项任务 以提高系统的效率 线程是在同一时间需要完成多项任务的时候被实现的 使用线程的好处有以下几 点 1 使用线程可以把占据长时间的程序中的任务放到后台去处理 2 用户界面可以更加吸引人 这样比如用户点击了一个按钮去触发某些事件的处 理 可以弹出一个进度条来显示处理的进度 3 程序的运行速度可能加快 中国矿业大学 2011 届本科生毕业设计 论文 第 8 页 4 在一些等待的任务实现上如用户输入 文件读写和网络收发数据等 线程就比 较有利了 在这种情况下我们可以释放一些珍贵的资源如内存占用等等 多线程在 NET 里如何工作 在本质上和结构来说 NET 是一个多线程的环境 有两种主要的多线程方法 是 NET 所提倡 使用 ThreadStart 来开始你自己的进程 直接的 使用 ThreadPool QueueUserWorkItem 或者间接的 比如 Stream BeginRead 或者调 用 BeginInvoke 使用 ThreadPool 类 一般来说 你可以 手动 为长时间运行的 任务创建一个新的线程 另外对于短时间运行的任务尤其是经常需要开始的那些 进程池是一个非常好的选择 进程池可以同时运行多个任务 还可以使用框架类 对于资源紧缺需要进行同步的情况来说 它可以限制某一时刻只允许一个线程访 问资源 这种情况可以视为给线程实现了锁机制 线程的基类是 System Threading 所有线程通过 CLI 来进行管理 1 创建线程 创建一个新的 Thread 对象的实例 Thread 的构造函数接受一个参 数 Thread DummyThread new Thread new ThreadStart dummyFunction 2 执行线程 使用 Threading 命名空间里的 start 方法来运行线程 DummyThread Start 3 组合线程 经常会出现需要组合多个线程的情况 就是当某个线程需要其他线 程的结束来完成自己的任务 假设 DummyThread 必须等待 DummyPriorityThread 来完成自己的任务 我们只需要这样做 DummyPriorityThread Join 4 暂停线程 使得线程暂停给定的秒 DummyPriorityThread Sleep 5 中止线程 如果需要中止线程可以使用如下的代码 DummyPriorityThread Abort 6 使用 Interlock C 提供了一个特殊的类叫做 interlocked 就是提供了锁机 制的实现 我们可以加入如下的代码实现锁机制 Interlocked SomeFunction ref counter 7 使用锁 这是为了锁定代码关键区域以进行同步 锁定代码如下 lock this Some statements 8 使用 Monitor 当有需要进行线程管理的时候我们可以使用 Monitor Enter this 2 2 3HTTP 和和 FTP 协议协议 HTTP 协议 中国矿业大学 2011 届本科生毕业设计 论文 第 9 页 HTTP Hyper Text Transfer Protocol 是超文本传输协议的缩写 它用于 传送 WWW 方式的数据 关于 HTTP 协议的详细内容请参考 RFC2616 HTTP 协议采用 了请求 响应模型 客户端向服务器发送一个请求 请求头包含请求的方法 URL 协议版本 以及包含请求修饰符 客户信息和内容的类似于 MIME 的消息结 构 服务器以一个状态行作为响应 相应的内容包括消息协议的版本 成功或者 错误编码加上包含服务器信息 实体元信息以及可能的实体内容 通常 HTTP 消息包括客户机向服务器的请求消息和服务器向客户机的响应消息 这两种类型的消息由一个起始行 一个或者多个头域 一个指示头域结束的空行 和可选的消息体组成 HTTP 的头域包括通用头 请求头 响应头和实体头四个部 分 每个头域由一个域名 冒号 和域值三部分组成 域名是大小写无关的 域值前可以添加任何数量的空格符 头域可以被扩展为多行 在每行开始处 使 用至少一个空格或制表符 HTTP 协议结构如下 HTTP 报文由从客户机到服务器的请求和从服务器到客户机的响应构成 请求 报文格式如下 请求行 通用信息头 请求头 实体头 报文主体 请求行以方法字段开始 后面分别是 URL 字段和 HTTP 协议版本字段 并以 CRLF 结尾 SP 是分隔符 除了在最后的 CRLF 序列中 CF 和 LF 是必需的之外 其他都可以不要 有关通用信息头 请求头和实体头方面的具体内容可以参照相 关文件 应报文格式如下 状态行 通用信息头 响应头 实体头 报文主体 状态码元由 3 位数字组成 表示请求是否被理解或被满足 原因分析是对原 文的状态码作简短的描述 状态码用来支持自动操作 而原因分析用来供用户使 用 客户机无需用来检查或显示语法 有关通用信息头 响应头和实体头方面的 具体内容可以参照相关文件 FTP 协议 FTP File Transfer Protocol 是文件传输协议的简称 用于 Internet 上 的控制文件的双向传输 同时 它也是一个应用程序 Application 用户可以 通过它把自己的 PC 机与世界各地所有运行 FTP 协议的服务器相连 访问服务器上 的大量程序和信息 FTP 的主要作用 就是让用户连接上一个远程计算机 这些计算机上运行着 FTP 服务器程序 察看远程计算机有哪些文件 然后把文件从远程计算机上拷到本 地计算机 或把本地计算机的文件送到远程计算机去 一般来说 用户联网的首要目的就是实现信息共享 文件传输是信息共享非 常重要的一个内容之一 早起在 Internet 上实现文件传输 并不是一件容易的事 我们知道 Internet 是一个非常复杂的计算机环境 有 PC 有工作站 有 MAC 有 中国矿业大学 2011 届本科生毕业设计 论文 第 10 页 大型机 据统计连接在 Internet 上的计算机已有上千万台 而这些计算机可能运 行不同的操作系统 有运行 Unix 的服务器 也有运行 Dos Windows 的 PC 机和运 行 Mac OS 的苹果机等等 而各种操作系统之间的文件交流问题 需要建立一个统 一的文件传输协议 这就是所谓的 FTP 基于不同的操作系统有不同的 FTP 应用程 序 而所有这些应用程序都遵守同一种协议 这样用户就可以把自己的文件传送 给别人 或者从其它的用户环境中获得文件 与大多数 Internet 服务一样 FTP 也是一个客户机 服务器系统 用户通过一 个支持 FTP 协议的客户机程序 连接到在远程主机上的 FTP 服务器程序 用户通 过客户机程序向服务器程序发出命令 服务器程序执行用户所发出的命令 并将 执行的结果返回到客户机 比如说 用户发出一条命令 要求服务器向用户传送 某一个文件的一份拷贝 服务器会响应这条命令 将指定文件送至用户的机器上 客户机程序代表用户接收到这个文件 将其存放在用户目录中 在 FTP 的使用当中 用户经常遇到两个概念 下载 Download 和 上载 Upload 下载 文件就是从远程主机拷贝文件至自己的计算机上 上载 文 件就是将文件从自己的计算机中拷贝至远程主机上 用 Internet 语言来说 用户 可通过客户机程序向 从 远程主机上载 下载 文件 2 2 4断点续传技术断点续传技术 在当今的网络时代 下载软件是使用最为频繁的软件之一 几年来 下载技 术也在不停地发展 最原始的下载功能仅仅是个 下载过程 即从 WEB 服务器上 连续地读取文件 其最大的问题是 由于网络的不稳定性 一旦连接断开使得下 载过程中断 就不得不全部从头再来一次 随后 断点续传 的概念就出来了 顾名思义 就是如果下载中断 在重新建立连接后 跳过已经下载的部分 而只 下载还没有下载的部分 多线程下载的基础是 WEB 服务器支持远程的随机读取 也即支持 断点续传 这样 在下载时可以把文件分成若干部分 每一部分创建 一个下载线程进行下载 不仅在关机或者网络出错的情况下这项技术 HTTP 断点续传支持 对于 HTTP 协议 向服务器请求某个文件时 只要发送类似如下的请求即 可 GET Path FileName HTTP 1 0 Host 80 Accept User Agent GeneralDownloadApplication Connection close 每行用一个 回车换行 分隔 末尾再追加一个 回车换行 作为整个请 中国矿业大学 2011 届本科生毕业设计 论文 第 11 页 求的结束 第一行中的 GET 是 HTTP 协议支持的方法之一 方法名是大小写敏感的 HTTP 协议还支持 OPTIONS HAED POST PUT DELETE TRACE CONNECT 等方法 而 GET 和 HEAD 这两个方法通常被认为是 安全的 也就是说任何实现了 HTTP 协议 的服务器程序都会实现这两个方法 对于文件下载功能 GET 足矣 GET 后面是一 个空格 其后紧跟的是要下载的文件从 WEB 服务器根开始的绝对路径 该路径后 又有一个空格 然后是协议名称及协议版本 除第一行以外 其余行都是 HTTP 头的字段部分 Host 字段表示主机名和端口 号 如果端口号是默认的 80 则可以不写 Accept 字段中的 表示接收任何类型 的数据 User Agent 表示用户代理 这个字段可有可无 但强烈建议加上 因为 它是服务器统计 追踪以及识别客户端的依据 Connection 字段中的 close 表示 使用非持久连接 关于 HTTP 协议更多的细节可以参考 RFC2616 HTTP 1 1 如果服务器成功收到该请求 并且没有出现任何错误 则会返回类似下面的 数据 HTTP 1 0 200 OK Content Length 13057672 Content Type application octet stream Last Modified Wed 10 Oct 2005 00 56 34 GMT Accept Ranges bytes ETag 2f38a6cac7cec51 160c Server Microsoft IIS 6 0 X Powered By ASP NET Date Wed 16 Nov 2005 01 57 54 GMT Connection close 第一行是协议名称及版本号 空格后面会有一个三位数的数字 是 HTTP 协议 的响应状态码 200 表示成功 OK 是对状态码的简短文字描述 状态码共有 5 类 1xx 属于通知类 2xx 属于成功类 3xx 属于重定向类 4xx 属于客户端错误类 5xx 属于服务端错误类 对于状态码 相信大家对 404 应该很熟悉 如果向一个服 务器请求一个不存在的文件 就会得到该错误 通常浏览器也会显示类似 HTTP 404 未找到文件 这样的错误 Content Length 字段是一个比较重要的字段 它标明了服务器返回数据的长度 这个长度是不包含 HTTP 头长度的 换句话说 我们的请求中并没有 Range 字段 后面会说到 表示我们请求的是整个文件 所 以 Content Length 就是整个文件的大小 其余各字段是一些关于文件和服务器的 属性信息 这段返回数据同样是以最后一行的结束标志 回车换行 和一个额外的回车 中国矿业大学 2011 届本科生毕业设计 论文 第 12 页 换行作为结束 即 r n r n 而 r n r n 后面紧接的就是文件的内容了 这样我们就可以找到 r n r n 并从它后面的第一个字节开始 源源不断的读 取 再写到文件中了 以上就是通过 HTTP 协议实现文件下载的全过程 但还不能实现断点续传 而 实际上断点续传的实现非常简单 只要在请求中加一个 Range 字段就可以了 假如一个文件有 1000 个字节 那么其范围就是 0 999 则 Range bytes 500 表示读取该文件的 500 999 字节 共 500 字节 Range bytes 500 599 表示读取该文件的 500 599 字节 共 100 字节 Range 还有其它几种写法 但上面这两种是最常用的 如果 HTTP 请求中包 含 Range 字段 那么服务器会返回 206 Partial Content 同时 HTTP 头中也会 有一个相应的 Content Range 字段 类似下面的格式 Content Range bytes 500 999 1000 Content Range 字段说明服务器返回了文件的某个范围及文件的总长度 这时 Content Length 字段就不是整个文件的大小了 而是对应文件这个范围的字节数 这一点一定要注意 一切好像基本上没有什么问题了 但事实并非如此 如果我们请求的文件的 URL 是类似 这样的文件 则不会有问题 但是很多软件下载网站的文件下载链接都是通过程序重定向的 比如 pchome 的 ACDSee 的 HTTP 下载地址是 创建了这个对象后 就可以通过 HttpWebRequest 属性 设置很多 HTTP 标头字 段的内容 如 hwr AddRange 100 1000 设置接收对象的范围为 100 1000 字节 HttpWebReques 对象使用 GetResponse 方法时 会返回一个 HttpWebResponse 对象 为提出 HTTP 返回报文信息 需要使用 HttpWebResponse 的 GetResponseStream 方法 该方法返回一个 Stream 对象 可以读取 HTTP 返回的 报文 如 首先定义一个 Strean 对象 public System IO Stream ns 然后 ns hwr GetResponse GetResponseStream 即可创建 Stream 对象 2 2 7 C 3 0 特性特性 linq LINQ is a set of extensions to the NET Framework that encompass language integrated query set and transform operations It extends C and Visual Basic with native language syntax for queries and provides class libraries to take advantage of these capabilities LINQ 是 Language Integrated Query 的简称 它是集成在 NET 编程语言中的 一种特性 已成为编程语言的一个组成部分 在编写程序时可以得到很好的编译 时语法检查 丰富的元数据 智能感知 静态类型等强类型语言的好处 并且它 同时还使得查询可以方便地对内存中的信息进行查询而不仅仅只是外部数据源 LINQ 定义了一组标准查询操作符用于在所有基于 NET 平台的编程语言中更加 直接地声明跨越 过滤和投射操作的统一方式 标准查询操作符允许查询 作用于 所有基于 IEnumerable接口的源 并且它还允许适合于目标域或技术的第三方 特定域操作符来扩大标准查询操作符集 更重要 的是 第三方操作符可以用它们 中国矿业大学 2011 届本科生毕业设计 论文 第 15 页 自己的提供附加服务的实现来自由地替换标准查询操作符 根据 LINQ 模式的习俗 这些查询喜欢采用与标准查询操作符相同的语 言集成和工具支持 System Linq 命名空间支持的 运用 linq 的支持 很大程度上加快了开发速 度 并且使用 linq 空间的泛型类和接口都很方便 2 3 可行性分析 可行性研究实质上是要进行一次大大压缩简化了的系统分析和设计的过程 也就是在较高层次上以较抽象的方式进行的系统分析和设计的过程 它的目的不 是解决问题 而是确定问题是否值得去解决 2 3 1技术可行性分析技术可行性分析 通过根据软件的需求 对本设计的技术实现进行全面的了解 可以采用 C 的 多线程机制 通过设置 HTTP1 1 的请求头信息 可以实现连接远程资源的指定偏 移位置 通过这个特性我们就可以实现多线程及断点续传的功能 C 对于网络方 面的支持也很强大 所以根据目前已知的技术 运用 C 编写 HTTP 线程下载工具在 技术实现层面是没有太大问题的 2 3 2经济可行性分析经济可行性分析 从开发这个比较简单的网络下载工具的意义上我们可以看出 赢利不是制作 这个下载工具的目的 目的在于通过这个下载软件的编写探索多线程文件下载的 基本原理 HTTP 文件的传输 以及 C 3 0 中 LINQ 许多方便之处 综合运用所学的 知识 提高自己的动手能力 加强自己在 C 方面的学习 所以它也就不存在经济 的问题 而从编写这个网络下载的目的方面来说是绝对值得编写的 其次使用 Microsoft Visual Studio 2008 开发采用的是其试用版本 因此不 会涉及到版权问题 综上所述该软件的编写在经济方面是可行的 2 3 3操作可行性分析操作可行性分析 由于这个多线程下载工具所面向的是广大具有一定上网经验的互联网用户 所以在设计中采用简洁的 GUI 界面 也因为简洁的界面设计使得系统在操作方式 上很容易让用户接受 并且操作行为具有用户自主的可设置性 和用户有良好的 可交互性 在操作上对一没有计算机操作经验的人来说也不会有难度 因此在操 作上也是行得通的 中国矿业大学 2011 届本科生毕业设计 论文 第 16 页 3 概要设计概要设计 3 1系统结构图 本系统采用现今比较流行的 MVC 模式的三层结构进行系统分层 这三层分别 为 GUI 表现层 控制层 底层下载操作 文件及网络操作 系统的结构图如下图 所示 GUI界面 控制器 下载操作文件操作网络操作 图 3 1 系统整体架构图 通过 MVC 模式的设计使得程序结构非常的清晰 同时也体现了一个软件初始的设 计远远比编码重要许多 3 2主要功能流程图 新建下载及恢复下载功能流程图如下图所示 在这里新建任务与恢复任务仅 是在任务的构建方式上不一样 在网络操作及下载操作上都没有什么区别 这样 的实现主要得益于对代码重用性的设计 中国矿业大学 2011 届本科生毕业设计 论文 第 17 页 新建任务 创建任务实体 网络操作 下载任务 保存文件 恢复任务 读取断点 组装任务 图 3 2 系统主要功能流程图 1 暂停与停止的功能实现流程图如下图所示 从这个图中我们可以发现和新建 任务 恢复任务一样具备同样的代码利用 停止线程过程是同一个 他们两个在 功能上不同仅是暂停任务时我们需要将暂停的断点记录下来 而停止任务却是将 断点记录给删除 并删除已下载的部分文件信息 暂停任务 停止线程 记录断点 任务停止 停止任务 删除文件 图 3 3 系统主要流程功能图 2 3 3其他主要功能 国际化支持 本软件支持多国语言的界面 通过 XML 界面信息配置文件用户可以自主设 置本国语言作为当前软件界面语言 当前支持英语和简体中文两种语言 下载优先级设置 可以通过下载优先级的设置是软件优先下载某个文件 浏览器下载右键支持 在浏览器中进行下载时可以通过右键快捷菜单启动本软件 直接进行下 载任务 当前支持 IE6 7 和 opera9 两种类型的浏览器 中国矿业大学 2011 届本科生毕业设计 论文 第 18 页 软件界面状态记录支持 通过写入注册表 HKEY CURRENT USER Software WebDownload 下记录一系 列的软件状态 4 详细设计详细设计 4 1获取网络资源 获取网络资源是下载过程中的第一个步骤 也是非常关键的一步 由于网络 的问题是多变的 有可能指定的下载资源已经不存在 或者网络连接有问题 等 一系列的问题 因此在连接资源过程中我们必须对于相应的连接进行相应在测试 它是否可行 它的信息是否是我们想要的 这一节主要就是讨论这个功能 4 1 1功能说明功能说明 要下载一个远程的资源就需我们能够先定位到指定的资源 并建立连接 在 本模块中实现的基本功能说是与远程的资源进行连接 并测试其连接状态 4 1 2设计说明设计说明 在做这个模块之前我们得先来了解下 HTTP 协议 HTTP 协议就是超文件传输协 议 采用了请求 响应模型 客户端向服务器发送一个请求 请求头包含请求的方 法 URI 协议版本 以及包含请求修饰符 客户信息和内容的类似于 MIME 的消 息结构 服务器以一个状态行作为响应 相应的内容包括消息协议的版本 成功 或者错误编码加上包含服务器信息 实体元信息以及可能的实体内容 连接资源 测试连接 初始化下载任务 下载属性 当前数据 中国矿业大学 2011 届本科生毕业设计 论文 第 19 页 资源 url public void InitializeDownload DownloadProperties properties CurrentData data Uri uri properties Url uri properties GeneralOptions DownloadProcessOptions Config Query Clone if uri null Host host if host Config Query Hosts FirstOrDefault h h Slike uri Host null if host Credentials null ApplyOptions properties GeneralOptions host GeneralOptions foreach Options o in host ProtocolOptions ApplyOptions properties ProtocolOptions First op op GetType o GetType o if String IsNullOrEmpty uri UserInfo string arr uri UserInfo Split properties Credentials new Credentials arr Length 0 arr 0 String Empty arr Length 1 arr 1 String Empty 下载数据 中国矿业大学 2011 届本科生毕业设计 论文 第 20 页 分析当前数据 断点续传使用 从断点位置继续传输实现下载加速的效应 已经下载的数据 public AnalysisResult AnalyzeInput CurrentData data bool clipboardMode data InputValue Length LastInputLength 3 if clipboardMode LastInputLength data InputValue Length string arr data InputValue Split new char r n StringSplitOptions RemoveEmptyEntries if arr Length 1 populateForOne string newInputText null List list new List for int i 0 i 0 RequiredActions actions RequiredActions UpdateLinkList if IsRenameGenerated data actions RequiredActions ClearRenameValue return new AnalysisResult Actions actions Downloads list InputValue newInputText else return new AnalysisResult Actions RequiredActions UpdateInput InputValue data InputValue Replace r n String Empty else return RefreshLinkData data 4 2线程任务分配 通过对 http1 1 协议的了解 知道通过对它的请求头进行设置 就可以获取 到远程文件的指定部分 而不用从头开始下载 利用这个特性设计一个多线程下 载的原型出来 要进行多线程下载 主要实现的是为每个线程分配一个指定范围 的数据下载 4 2 1功能说明功能说明 在多线程下载过程中 需要让每一个线程都指向指定资源的一部分 且不重 复 如何为每一个下载线程分配它指向的特定部分就是这个模块所要完成的任务 中国矿业大学 2011 届本科生毕业设计 论文 第 22 页 4 2 2设计说明设计说明 确定了采用分块的形式进行任务的分配 那要考虑的问题就只有如何分块了 如何分配才能准备无误 并且保证各个下载线程所要下载的任务更合理 本系统 采用的是平均分配的方法 就是为每一个下载线程分配尽可能相同的字节数 在 这个过程中我们得指定下载任务相对于资源起点的偏移量及下载的长度 4 2 3设计流程设计流程 新的下载任务 取得文件的大小 判断是否需要下 载加速 分段 需要分段下载不需要分段下载 主线程创建下载线程 并且 分配任务开始下载 主线程开始下载 下载完成或失败 触发相 应的事件 图 4 1 线程任务分配流程图 中国矿业大学 2011 届本科生毕业设计 论文 第 23 页 4 3创建下载任务 HTTP请求发送到已验证的URL 读取返回的HTTP报文 是否需要URL重定向 对该URL指定的资源进行下载 获取定向后的资 源URL 开始下载 多线程或单线程 接收UI命令 执行UI命令 下载完成或失败 触发下载完成或失败 事件 图 4 2 创建下载任务流程图 4 4任务下载 任务下载模块是本系统的核心 在任务运行过程中主要的时间也是在花这一 块 它的设计质量 会对软件的效率 占用资源的大小 软件的可靠性及可用性 有很大的影响 就拿软件的可用性来说 因为在系统的下载过程中 读取出来的 长度是随机的 而且我们还要关心着本线程的下载范围 因此如果未对其中的各 个细节进行考虑 很容易就会出现读脏数据的情况 导致最终下载过来的数据无 法使用 中国矿业大学 2011 届本科生毕业设计 论文 第 24 页 4 4 1功能说明功能说明 创建完任务后可以开始进行下载操作了 在这个模块中 要使用线程技术实 现一个可重用的 较高效的实现程序 主要功能就是能读取出指定资源相应偏移 量的数据 并调用文件操作模块将下载的数据保存到相应文件中去 4 4 2设计说明设计说明 任务下载的重点在于多线程进行下载时对下载的线程进行有效的控制 以及 对当前下载到得数据量实时进行统计友好的反应到 UI 上 这就是多线程任务下载 的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 统编版2025-2026学年 语文三年级上册 期中测试卷 (有答案)
- 河南省周口市等2地2025-2026学年高三上学期开学物理试题(含解析)
- 部门干部安全培训总结报告课件
- 部门安全培训概况课件
- 辩论程序课件
- 基于人工智能的合成路线智能生成与实验验证的闭环反馈系统构建
- 城市级智慧能源管理中探测器网络拓扑优化与能耗悖论解构
- 车队车辆安全培训课件
- 可降解高分子复合材料在一次性双极电极板降解周期与临床时效平衡中的挑战
- 可重构凸轮齿轮模块化设计对柔性制造系统的适配性研究
- 金属结构自检自查报告
- 2025年高端酒店装修设计与施工合同范本2篇
- 2023年政府采购评审专家考试题库(含答案)
- GB/T 45083-2024再生资源分拣中心建设和管理规范
- 沐足行业严禁黄赌毒承诺书
- 华南理工大学《微积分Ⅱ(二)》2021-2022学年第一学期期末试卷
- 高职数学课件 1.1函数
- GB/T 5526-2024动植物油脂相对密度的测定
- 北师大版 五年级上册数学 预习单
- 2.10丰巢智能柜合作协议
- 九一八知识竞赛题50题
评论
0/150
提交评论