基于HTTP的多线程下载器毕业论文(1)

科技大学

毕业设计(论文)

题目基于HTTP的多线程下载器

作者

学院

专业

学号

指导教师

科技大学

毕业设计(论文)任务书

1 设计(论文)题目及专题:基于HTTP的多线程下载器

2 学生设计(论文)时间:自 2012 年 1月 5 日开始至 2012 年 6 月 6 日止

3 设计(论文)所用资源和参考资料:

[1] 李钟尉,马文强,陈丹丹.Java从入门到精通[M].清华大学出版社,2008年

[2] 孙卫琴.Java面向对象编程(Java开发专家)[M].电子工业出版社,2006年

[3] 克里舍纳姆塞,范群波.Web协议与实践(HTTP1.1网络协议缓存技术和流量测量).科学教育出版社

4 设计(论文)应完成的主要内容:

设计并实现基于红彤彤批协议的多线程下载器,实现了断点续传、回收站、悬浮窗等基本功能。

5 提交设计(论文)形式(设计说明与图纸或论文等)及要求:

(1)论文思路清晰,条理清楚,中心突出,内容充实,论据充分,结构紧凑,层次分明,图表清晰,格式规范,结论正确;按《湖南科技大学本科生毕业设计(论文)要求与规范》编排、打印文稿;

(2)上交论文(纸质)打印文稿和系统源码(电子版);

6 发题时间:年月日

指导教师:(签名)

学生:(签名)

毕业设计(论文)指导人评语

[主要对学生毕业设计(论文)的工作态度,研究内容与方法,工作量,文献应用,创新性,实用性,科学性,文本(图纸)规范程度,存在的不足等进行综合评价]

指导人:(签名)

年月日指导人评定成绩:

毕业设计(论文)评阅人评语

[主要对学生毕业设计(论文)的文本格式、图纸规范程度,工作量,研究内容与方法,实用性与科学性,结论和存在的不足等进行综合评价]

评阅人:(签名)

年月日评阅人评定成绩:

毕业设计(论文)答辩记录

日期:

学生:学号:班级:

题目:

提交毕业设计(论文)答辩委员会下列材料:

1 设计(论文)说明书共页

2 设计(论文)图纸共页

3 指导人、评阅人评语共页

毕业设计(论文)答辩委员会评语:

[主要对学生毕业设计(论文)的研究思路,设计(论文)质量,文本图纸规范程度和对设计(论文)的介绍,回答问题情况等进行综合评价]

答辩委员会主任:(签名)

委员:(签名)

(签名)

(签名)

(签名)答辩成绩:

总评成绩:

摘要

当今的互联网时代,下载器是人们进行正常上网必不可少的工具。现在主流的下载器有很多,如迅雷、电驴、qq旋风等等。毋庸置疑,这些下载器都用到了多线程。所谓线程就是程序流执行的最小单元。在下载器中,线程可以简单的理解为是一条下载通道。那么,单线程就是用一条下载通道进行下载,而多线程就是同时用多条下载通道进行下载。当用户选择多线程进行下载,下载器就会将下载资源按线程数目进行分片,然后同时将这些片下载到本地。很显然多线程相对于单线程而言对CPU的利用率更高,这样更有利于提高下载的速度。

HTTP即超文本传送协议,它是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。HTTP是一种常用的网络协议。用户如果想要上网,最基本的就是要遵循HTTP协议。

此次毕业设计采用了JA V A程序开发语言和eclipse开发工具。本课题重点介绍了在HTTP网络环境下实现多线程以及下载过程中的断点续传的原理和方法,有助于用户对下载器有更深层次的了解和更好的使用下载工具。

关键词:HTTP;下载器;Java;多线程

ABSTRACT

In today’s internet times, the downloader is the necessary tools for people. Now there are a lot of mainstream downloaders, such as the thunder,EasyMule,qq whirlwind and so on. Undoubtedly, all of these downloaders used the Multi-thread. The so-called thread program is the smallest unit of execution flow. Thread can be simple to understand as a download channel. So, single thread is to download with a single download channel, and downloading with multi-thread is to download with a lot of download channel at the same time. When a user selects a multi-thread download, download device will download resources according to the number of threads . Then download resources to local place at the same time. Obviously Multi-thread take a higher CPU utilization than single thread, so it can improve download speed.

HTTP namely hypertext transfer protocol, it is a kind of detailed communication regulations between the world wide web server and browser, it is a data transfer protocol which can through the Internet transmitting the world wide web document transmission. HTTP is a common network protocol. If you want to get to the Internet, the most basic is to follow the HTTP protocol.

I use java program development language and eclipse development tool in my graduation design. This subject mainly introduces the principle and method to realize the multi-thread download process and break point transmission under HTTP network environment .It can help users to have a deeper understanding about downloader and how to use download tools better.

Keywords: HTTP;downloader; Java; Multi-thread

目录

第一章引言 .......................................................................................................... - 3 -

1.1 项目背景................................................................................................... - 3 -

1.2 编写目的................................................................................................... - 3 -

1.3 论文的主要内容....................................................................................... - 3 -第二章应用开发相关技术和理论 ...................................................................... - 5 -

2.1 HTTP......................................................................................................... - 5 -

2.1.1 Http简介........................................................... - 5 -

2.1.2 Http请求和响应 ............................................... - 5 -

2.2 JA V A ......................................................................................................... - 7 -

2.2.1 Java简介 ........................................................... - 7 -

2.2.2 Swing简介......................................................... - 7 -

2.3 线程和多线程........................................................................................... - 8 -

2.3.1 线程的基本概念 ............................................... - 8 -

2.3.2 多线程的优点 ................................................... - 9 -

2.3.3 Java线程的实现 ............................................... - 9 -

第三章系统分析与设计 .................................................................................... - 10 -

3.1 功能需求................................................................................................. - 10 -

3.2 系统功能模块的划分............................................................................. - 10 -

3.3 系统流程图............................................................................................. - 11 -

3.4 系统结构用例图..................................................................................... - 12 -

4.1 开发环境构建......................................................................................... - 13 -

4.1.1 JDK和Eclipse的安装...................................... - 13 -

4.2 MainFrame模块设计............................................................................. - 14 -

4.2.1 MainFrame模块结构...................................... - 14 -

4.2.2 主界面设计 ..................................................... - 15 -

4.2.3 MainFrame组件监听事件 .............................. - 17 -

4.3 GlobalData模块设计 ............................................................................. - 18 -

4.4 DownTableModel模块设计 .................................................................. - 18 -

4.4.1 模块UI设计.................................................... - 18 -

4.4.2 模块数据动态更新 ......................................... - 19 -

4.5 NewDownload模块设计 ....................................................................... - 21 -

4.5.1 模块流程分析 ................................................. - 21 -

4.5.2 模块UI设计.................................................... - 23 -

4.5.3 NewDownload监听事件................................. - 24 -

4.6 Download模块的设计........................................................................... - 25 -

4.6.1 模块流程分析 ................................................. - 26 -

4.6.2 模块详细设计 ................................................. - 27 -

4.7 DownloadThread模块的设计................................................................ - 29 -

4.8 LoadProperty模块设计.......................................................................... - 30 -

4.8.1 模块流程分析 ................................................. - 30 -

4.8.2 LoadProperty模块实现................................... - 30 -

4.9 悬浮窗模块设计..................................................................................... - 32 -

4.9.1 悬浮窗UI设计................................................ - 32 -

4.9.2 悬浮窗主件监听事件...................................... - 33 -

第五章结论 ........................................................................................................ - 35 -参考文献 .......................................................................................................... - 36 -致谢 . (37)

第一章引言

1.1 项目背景

目前国内下载器有很多种,有基于Http下载的,也有基于P2P下载的(最典型的就是电驴)。HTTP 是Hyper Text Transportation Protocol(超文本传输协议)的缩写,它是计算机之间交换数据的方式,原理非常简单,就是用某种规则(协议)和提供文件的服务器取得联系并将文件搬到自己的计算机中来,从而实现下载的功能。HTTP下载模式是最经典的下载方式,也是发展得最成熟的技术,绝大部分的下载软件是从基于HTTP下载模式发展来的。HTTP下载模式依然是下载器中不可缺少的部分。

对于多线程技术大家都不陌生,多线程技术在现阶段的下载器中得到了广泛的应用。由于在网络环境下,用户对于下载器速度的要求很高。当下载器采用多线程模式,实现在网络环境下对资源的同步下载,可以明显提高对CPU和带宽的利用率,最终实现下载速度的提高。

本课题就是基于上述背景而开展的。

1.2 编写目的

如今是个互联网的时代,网络资源共享已经是潮流。我们如何获取这些共享的网络数据就要用到各种网络资源下载器。本文重点介绍了基于Http协议的多线程下载器的原理以及实现,希望能帮助用户更好的了解下载器,从而让用户能够更好的、更合理的去使用下载器,方便用户快速的下载所需要的资源。

1.3 论文的主要内容

下载器的使用在我国已经是非常普遍,下载技术也日趋成熟。下面我将介绍如何利用Java以及Java提供的用户界面开发工具包Swing来实现下载器的功能和界面。

本论文具体章节安排如下:

第一章,引言。主要介绍本课题的背景和意义。

第二章,系统开发相关概念和理论。主要介绍本系统涉及的相关概念、技术。

第三章,系统分析。本章主要对系统进行了需求分析,系统功能模块划分;同时还给出了系统流程图和用例图。

第四章,系统实现。这章是全文的核心部分,包括开发运行环境构建,系统

各功能模块的实现等。

第五章,结论,对本文聚焦的问题进行总结。

第二章应用开发相关技术和理论

2.1 HTTP

2.1.1 Http简介

HTTP 是Hyper Text Transportation Protocol(超文本传输协议)的缩写,是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议,位于应用层。该协议使用可靠的TCP连接,默认端口是80;

2.1.2 Http请求和响应

HTTP协议基于客户端/服务器模式,客户端主动发出HTTP请求,服务器接收HTTP请求,返回HTTP响应结果。简单的http请求响应过程如图2.1所示:

图2.1 http请求与响应

请求报文是指客户端浏览器向网络服务器请求页面时,发送到服务器端的字符串,必须符合HTTP协议的格式要求,它可能包含如下组成部分:GET /index.html HTTP/1.1

Accept: image/gif, image/x-xbitmap, image/jpeg, …, */* //客户端可接受的文件类型Accept-Language: zh-cn

UA-CPU: x86 //客户端处理器类型

Accept-Encoding: gzip, deflate //表示客服端是否支持压缩格式传输

User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)

Host: https://www.360docs.net/doc/288934227.html,:80

Connection: Keep-Alive //表示客户端是否与主机持续连接

<空行>

注意:请求报文中的大部分项目是可选的,只有GET和Host部分是必需的;

GET部分的格式是:

GET<空格>/[请求的URL]<空格>HTTP/协议版本号

如:GET /index.html HTTP/1.1

Host部分的格式是:

Host:<空格>服务器域名或IP地址:端口号

如:Host: https://www.360docs.net/doc/288934227.html,:80

换言之,请求报文中只要包含以上两部分,就可以向网络站点服务器请求到页面。

响应报文是指网络服务器收到来自客户端的请求后,发回到客户端的字符串,它用来告诉客服端:服务器已经接受请求,随后跟随的是被请求的网页内容;

HTTP/1.1 200 OK

Date: Sat, 11 Aug 2007 11:58:37 GMT //响应时间

Server: Apache/1.3.37(Unix) //服务器类型

Accept-Ranges: bytes //何种方式发送响应数据

Content-Length: 11503

Content-Type: text/html

<空行>

响应报文中也有两部分是必需的:

HTTP/协议版本号<空格>状态码<空格>OK 状态码是一个3位整数,用来表示不同的状态,200表示响应成功,

如:HTTP/1.1 200 OK

Content-Type:<空格>text/html;<空格>charset=字符集编码

用来描述服务器发回响应的文件类型以及字符集编码,text/html说明是文本文件或超文本文件,如:Content-Type: text/html; charset=GB2312

附:响应状态码的具体描述:

1xx-信息提示

这些状态代码表示临时的响应。客户端在收到常规响应之前,应准备接收一个或多个1xx 响应。

100-继续。

101-切换协议。

2xx-成功

这类状态代码表明服务器成功地接受了客户端请求。

200-确定。客户端请求已成功。

201-已创建。

202-已接受。

203-非权威性信息。

204-无内容。

205-重置内容。

206-部分内容。

3xx-重定向

客户端浏览器必须采取更多操作来实现请求。例如,浏览器可能不得不请求服务器上的不同的页面,或通过代理服务器重复该请求。

301-对象已永久移走,即永久重定向。

302-对象已临时移动。

304-未修改。

307-临时重定向。

4xx-客户端错误

发生错误,客户端似乎有问题。例如,客户端请求不存在的页面,客户端未提供有效的身份验证信息。

400-错误的请求。

401-访问被拒绝。IIS 定义了许多不同的401 错误,它们指明更为具体的错误原因。这些具体的错误代码在浏览器中显示,但不在IIS 日志中显示。5xx-服务器错误

服务器由于遇到错误而不能完成该请求。

500-内部服务器错误。

504-网关超时。

505-HTTP 版本不受支持。

2.2 JA V A

2.2.1 Java简介

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE, JavaEE, JavaME)的总称。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。

2.2.2 Swing简介

Swing是一个用于开发Java应用程序用户界面的开发工具包。它以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。Swing 开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。

Swing组件是在AWT组件基础上发展而来的轻量级组件,与AWT相比不但改

进了用户界面,而且所需的系统资源更少;Swing是纯Java组件,使得应用程序在不同的平台上运行时具有相同外观和相同的行为。

Swing组件的类体系结构如图2.2所示:

图2.2 Swing组件体系结构图

创建图形界面的步骤:

导入Swing包

选择界面风格

设置顶层容器

设置按钮和标签

将组件放到容器上

为组件增加边框

处理事件、辅助技术支持

2.3 线程和多线程

2.3.1 线程的基本概念

线程(thread)是"进程"中某个单一顺序的控制流。也被称为轻量进程(lightweight processes)。计算机科学术语,指运行中的程序的调度单位。

线程,有时被称为轻量进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈

组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。每一个程序都至少有一个线程,那就是程序本身。

线程是程序中一个单一的顺序控制流程。在单个程序中同时运行多个线程完成不同的工作,称为多线程。

2.3.2 多线程的优点

CPU是以时间片的方式为进程分配CPU处理时间的,当一个进程以同步的方式去完成几件事情时,此进程必须完成了第一件事情以后再做第二件事,如此按顺序地向CPU请求完成要做的事情。在此单线程的工作模式下,如果把CPU看作是一共有100个时间片的话,CPU可能一直都只是花了其中的10个时间片来处理当前进程所要做的事情,只是用到了CPU的10%的时间片,而其他时间都白白浪费了,当然,实际上CPU的工作模式还是做完一件事以后再去做另一件事,只是CPU的处理速度非常快,很快就处理完成所请求的情事。

采用多线程可以很明显的提高CPU的利用率。如当前进程要完成三件事情1、2、3,那么CPU会分别用10%的时间来同时处理这3件事情,从而让CPU 的使用率达到了30%,大大地提高了CPU的利用率。多线程在处理一些特殊的场合其优势更加明显(如下载器)。

2.3.3 Java线程的实现

Java线程的实现一般有两种方式:第一种是继承Thread类;第二种是实现Runnable接口。

第三章系统分析与设计

3.1 功能需求

由于丰富的网络资源,现在的用户下载需求量也越来越大,同时对下载软件处理资源速度的要求也越来越高。而多线程程序设计可以很好的解决程序并发的问题。在下载软件中应用多线程技术可以理解为将一个下载任务分成若干份来完成,其中的并发控制将使下载的效率大大提高。

由于下载资源的时间长短不一,可能很短也可能比较长。如果在一段很长的下载时间段中出现了意外情况,比如电源意外被切断、网络中断、或是操作系统故障导致系统重新启动。这些原因都会导致下载的中断,但是当用户重新下载资源时发现原来下载的数据已经消失你还是要回头再来。断点续传就很好的解决了这样的问题,它的任务是在下载任务停止时,记录当前下载的信息并且利用网络协议中的一些重定向机制继续完成下载任务而不必从头再来。

简单来说可以将需求整理为如下:

可视化界面;

支持多线程下载;

支持断点续传;

3.2 系统功能模块的划分

系统主要包含如下几个类:

MainFrame:负责定义可视化界面,定义主界面的监听事件。

DownTableModel:继承AbstractTableModel类,此类对象用于处理表格。

GlobalData:用于保存全局数据。

NewDownload:创建新建下载的页面,定义新建下载页面的监听事件。

Download:做下载前的准备,包括连接资源,实现多线程,分配每个线程的下载量。

DownloadThread:实现下载,并进行数据流的I/O操作。

LoadProperty:保存当界面关闭时的下载信息和读取界面打开时的下载信

息。

其中每个类可以看做是一个功能模块。

3.3 系统流程图

系统整体运行流程图:如图3.1所示:

图3.1 系统流程图

3.4 系统结构用例图

根据系统需求分析,系统需实现新建下载、暂停下载、开始下载、删除下载四个基本功能。当系统在存在未完成任务退出时需保存下载任务的断点信息。同时启动程序时应导入未完成任务的下载信息。系统结构用例图如图3.2所示:

图3.2 系统结构用例图

第四章系统实现

4.1 开发环境构建

开发应用程序所需要的环境:

1.操作系统:Windows 或Linux系统。

2.开发环境:Eclipse 。

3.开发工具包:JDK。

本应用使用的开发平台为Win7,所使用的开发环境为Eclipse3.6.2,所用到的开发工具包有JDK1.6。

4.1.1 JDK和Eclipse的安装

第一步:安装Java JDK1.6

安装完成jdk以后最重要的是配置环境变量:

在“我的电脑”上点右键—>“属性”—>“高级”—> “环境变量(N)”;

在“系统变量”中,设置3项属性,JA V A_HOME,PATH,CLASSPATH(大小写无所谓),若已存在则点击“编辑”,不存在则点击“新建”;JA V A_HOME为java的安装路径,如:C:\Program Files\Java\jdk1.6.0_05;Path中加入

“%JA V A_HOME%/bin;”Classpath中加入“.;%JA V A_HOME%\lib;”

最后在DOS下进行测试:输入java 、javac、java –version等命令,分别输出如图4.1,图4.2,图4.3则表示配置成功。

图4.1

相关主题
相关文档
最新文档