版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、本科毕业论文(设计)题 目 基于http的多线程断点续传 下载工具应用开发 学 院 计算机与信息科学学院 专 业 年 级 学 号 姓 名 指 导 教 师 成 绩 2009年 4 月 30日 目 录摘要- 3 -abstract- 3 -引言- 4 -第一章 绪论- 5 -1.1问题的研究背景与研究价值- 5 -1.1.1问题的研究背景- 5 -1.1.2问题的研究价值- 5 -1.2可行性分析- 6 -1.2.1技术可行性- 6 -1.2.2经济可行性- 6 -1.2.3操作可行性- 6 -第二章 相关基础知识以及开发平台- 7 -2.1相关基础知识- 7 -2.1.1下载协议概述- 7 -2
2、.1.2 http协议简介- 8 -2.1.3 java中的多线程- 13 -2.1.4断点续传原理- 14 -2.1.5对象序列化- 15 -2.2 java概述- 16 -2.2.1 java语言特点- 16 -2.2.2 java的常用包介绍- 16 -2.3开发平台的选择- 17 -2.3.1软件选择- 17 -2.3.2关于eclipse- 17 -第三章 需求分析- 19 -3.1用户需求分析- 19 -3.2业务流分析- 20 -3.3系统环境- 20 -3.3.1开发环境配置过程- 20 -第四章 系统设计- 22 -4.1系统的设计要点- 22 -4.2系统总体功能结构- 2
3、2 -第五章 系统的详细设计与实现- 24 -5.1系统的文件结构- 24 -5.2用户界面的实现- 25 -5.2.1功能描述- 25 -5.2.2界面实现- 25 -5.2.3添加部分代码- 27 -5.3单线程直接获取网络文件- 30 -5.3.1功能描述- 30 -5.3.2添加核心代码(测试代码)- 30 -5.4单线程断点续传- 30 -5.4.1问题提出- 30 -5.4.2功能描述- 31 -5.4.3关键步骤及主要代码- 31 -5.5多线程的断点续传及同步的实现- 33 -5.5.1功能描述- 33 -5.5.2核心代码- 33 -5.6用监视线程来保证文件下载结束时间-
4、36 -5.6.1功能描述- 36 -5.6.2核心代码(在监测线程中使用)- 37 -5.7断点数据的记录与恢复- 37 -5.7.1功能描述- 37 -5.7.2核心代码- 37 -第六章 结束语- 40 -参考文献- 41 -致 谢- 42 -基于java的多线程跨平台下载软件的实践摘要: 在网络高速发展的今天,如何能高效合理的下载信息资源已经变得越来越重要。而目前的网络下载工具虽然种类繁多,但是并没有多少开源的软件可供网络编程人员共同学习和研究,这是一个非常不利于软件发展的现象。因此本论文研究了基于http协议的多线程断点续传的原理,并设计开发了一个跨平台的开源断点续传下载软件,它使用
5、j2se作为开发环境,以文件作为数据的存储工具,以期望其在下载速度与资源共享上与现有开源下载工具相比,能有更进一步的发展。关键字:网络下载;多线程;断点续传;跨平台;开源;the practice of java multithreading and cross-platform -download tool with broken/resume function based on httpabstract: how to work with the internet efficiently now has become more and more important as the inter
6、ner sharp developing. and although therere kinds of internet download tools popular in our life, only few of open-source softwares is helpful for network programmers to work with, obviously its not a good phenomenon. also for the loading principle and http research of multi-threaded, as a result, i
7、decided to work out an open-source internet download tool for internet lovers to exploit. we develop this software with j2se, and use the documents as a data storage tool in order to has a further development in loading speed and resourse sharing, so that we can make it be cross-platform. we can fin
8、d out that the tools such as thurnderbolt and express are non-open-source and work for just some platforms, they are far to be cross-platform.key words: internet download; multi-threaded; broken/resume function; cross-platform; open-source;引言在当今的网络时代,下载软件是使用最为频繁的软件之一。几年来,下载技术也在不停地发展。最原始的下载功能仅仅是个“下载”
9、过程,即从web服务器上连续地读取文件。其最大的问题是,由于网络的不稳定性,一旦连接断开使得下载过程中断,就不得不全部从头再来一次。随后,“断点续传”的概念就出来了,顾名思义,就是如果下载中断,在重新建立连接后,跳过已经下载的部分,而只下载还没有下载的部分。随着多线程技术的发明,越来越多的语言能很完善的支持此技术。在“网络蚂蚁”软件流行开后,许多下载软件也都纷纷效仿,是否具有多线程下载技术、甚至能支持多少个下载线程都成了人们评测下载软件的要素。多线程下载的基础是web服务器支持远程的随机读取,即支持断点续传。这样,在下载时可以把文件分成若干部分,每一部分创建一个下载线程进行下载。现在,不要说编
10、写专门的下载软件,在自己编写的软件中,加入下载功能有时也非常必要。而现在网络上的下载软件往往都是支持单一系统平台的,为了支持开源软件及多平台可移植,本文选用了java语言进行系统的开发,数据采用文件存储,这样能更好的支持跨平台的特性。本文的主题即怎样编写一个支持断点续传和多线程的下载模块,主要支持http协议,其他协议如bt,vagaa,emule等协议的支持等待以后的支持开源的朋友继续开发。当然,下载的过程非常复杂,在一篇文章中难以全部阐明,所以,与下载过程关系不直接的部分基本上都忽略了,如图形化界面和网络错误处理等。第一章 绪论1.1问题的研究背景与研究价值1.1.1问题的研究背景以往我们
11、开发的程序大多是单线程的,即一个程序只有一条从头至尾的执行线索。然而现实世界中的很多过程都具有多条线索共同执行同一动作的特性。例如,一个网络服务器可能需要同时处理多个客户机的请求等。java语言的一大特性就是内置对多线程的支持。多线程是指同时存在几个执行体,按几条不同的执行线索共同工作的情况,它使得编程人员可以很方便地开发出具有多线程功能、能同时处理多个任务的功能强大的应用程序。虽然执行线程给人一种几个事件同时发生的感觉,但这只是一种错觉,因为我们的计算机在任何给定的时刻只能执行那些线程中的一个。为了建立这些线程正在同步执行的感觉。java快速地把控制从一个线程切换到另一个线程。多个线程的执行
12、是并发的,也就是在逻辑上的“同时”,而不管是否是物理上的“同时”。如果系统只有一个cpu,那么真正的“同时”是不可能的,但是由于cpu的速度非常快,用户感觉不到其中的区别,因此我们也不用关心它,只需要设想各个线程是同时执行即可。自从“多线程下载”技术发明以来,这项技术得到前所未有的关注已是不争的事实。在“网络蚂蚁”软件流行开后,许多下载软件也都纷纷效仿,是否具有“多线程下载”技术、甚至能支持多少个下载线程都成了人们评测下载软件的要素。“多线程下载”的基础是web服务器支持远程的随机读取,即支持“断点续传”。这样,在下载时可以把文件分成若干部分,每一部分创建一个下载线程进行下载。1.1.2问题的
13、研究价值 多线程和传统的单线程在程序设计上最大的区别在于,由于各个线程的控制流彼此独立,使得各个线程之间的代码是无序执行的,由此带来的线程调度问题。由于是多线程进行断点续传,还要考虑记录多个断点位置,且记录断点位置时也要考虑同步互斥等问题。所有这些都使得这一步比较复杂。但是可以明显提高网络文件的下载速度。现在,不要说编写专门的下载软件,在自己编写的软件中,加入下载功能有时也非常必要。如让自己的软件支持自动在线升级,或者在软件中自动下载新的数据进行数据更新,这都是很有用、而且很实用的功能。由于网络的不稳定性,一旦连接断开使得下载过程中断,就不得不全部从头再来一次。 “断点续传”概念的推出,使得下
14、载中断的资源,在重新建立连接后,跳过已经下载的部分,而只下载还没有下载的部分,极大的满足了用户的需要。1.2可行性分析1.2.1技术可行性多线程跨平台的下载工具的实现不是很困难,首先是多线程,java语言很好的支持了多线程,其api中java.lang.thread包中提供了很多多线程的处理。其次是跨平台,java语言本身就是平台无关性的语言,编译生成class的字节码文件,不同的平台提供不同的jvm,确保了java的跨平台性。第三是对协议的支持,api中的j.*中提供了对http支持的方法。最后也是最复杂的就是java的图形化界面,java本身不擅长图形化界面,但awt及swi
15、ng9也提供了足够的支持。1.2.2经济可行性资金投入:基本上不需要资金投入,紧紧需要人力开发的投入。因为java是开源语言,eclipse也是开源软件,互联网上的资源一般也是免费下载。市场前景:本软件为开源软件,完全公益性。现在windows平台下的下载工具已经足够多,但在其他平台下如linux及mac下还是有一定的市场前景,相信经过开源爱好者的维护一定会有很大的发展空间。1.2.3操作可行性大学期间对java有了很深的认识,具有一定的技术基础,而且适逢在惠普公司进行实习,指导老师也有很强的java开发项目经验,不懂的问题可以请教老师,相信一定能完成该项目。而对于用户来说,绿色软件,无需安装
16、,操作简单易懂,使用户不用具备专业知识,也可使用本软件。第二章 相关基础知识以及开发平台2.1相关基础知识2.1.1下载协议概述按照下载方式,总的来说这些协议分为两大类:第一类:服务器下载;如http和ftp,他们都是将服务器上已存在的文件复制到你的电脑上,这些文件保存在服务器上,但是你只能通过地址来下载,下载工具就是复制这个文件到你的电脑,而迅雷这类软件还会去其他服务器上搜索相同的文件,并从多个不同的服务器同时下载,即镜像下载,这样也能加快速度。如果下载的人很多的话,服务器输出的流量也很大,这样的话会加重服务器的负担,下载速度必然会慢下来。 图2-1 服务器下载原理图fig 2-1 serv
17、er download principle第二类:p2p(peer to peer)下载; bt、emule、vagaa都属于此类,虽然协议不一样,但是下载方式都是根据文件信息,从互联网中寻找正在下载该文件的用户,并从他们那里下载。当然软件会寻找用户,并从多个用户下载自己没有的部分,而将自己已下载的而别人没有的上传给别人,相对与别人来说,你的上传就是他的下载了。此类软件就是在浩瀚的互联网中寻找已经下载或者正在下载的那些文件,所有的下载用户形成一个连锁网络,每个人都从其他人那里获得,同时也给别人上传,体现了人人平等的关系。由于没有固定的服务器,每个人即充当客户端也充当服务器,人越多下载速度越快是
18、这类下载的优点。图2-2 p2p下载基本原理图fig 2-2 p2p principle2.1.2 http协议简介在tcp/ip体系结构中,http属于应用层协议,位于tcp/ip协议的顶层。浏览web时,浏览器通过http协议与web服务器交换信息。这些信息(文档)类型的格式由mime定义。http协议具有以下的特点: 1. http按客户/服务器模式工作http支持客户(一般情况是浏览器)与服务器的通讯,相互传输数据。http定义的事务处理由以下四步组成: o 客户与服务器建立连接; o 客户向服务器提出请求; o 如果请求被接受,则服务器送回响应,在响应中包括状态码和所需的文件; o
19、客户与服务器断开连接 ;o 一次http操作称为一次事务(transaction)。2. http是无状态的也就是说,浏览器和服务器每进行一次http操作,就建立一次连接,但任务结束就中断连接。 3. http使用元信息作为头标http对所有事务都加了头标(header)。也就是说,在主要数据前加上一块信息,称为元信息(metainformation)。它使服务器能够提供正在传送数据的有关信息。例如,传送对象是哪种类型,是用哪种语言书写的等。从功能上讲,http支持四类元信息:一般信息头标、请求头标、响应头标和实体头标。 4. http支持两种请求和响应格式http由不同的两部分组成,一是从浏
20、览器发往服务器的请求,二是服务器对客户的响应。http支持两种请求和响应,即简单请求与完全请求和简单响应与完全响应。 5. http是基于文本的简单协议。http的请求13 http的常用请求方法:表 2-1 http的常用请求方法table 2-1 http request method方 法 说 明 get请求读取一个web页面head请求读取一个web页面的头标put请求存储一个web页面post附加到命名资源中delete删除web页面link连接两个已有资源unlink取消两个资源之间的已有连接http请求的格式如下所示:request-lineheadersblanklinereq
21、uest-body在http请求中,第一行必须是一个请求行(request line),用来说明请求类型、要访问的资源以及使用的http版本。紧接着是一个首部(header)小节,用来说明服务器要使用的附加信息。在首部之后是一个空行,再此之后可以添加任意的其他数据称之为主体(body)。在http中,定义了大量的请求类型,不过开发人员关心的只有get请求和post请求。只要在web浏览器上输入一个url,浏览器就将基于该url向服务器发送一个get请求,以告诉服务器获取并返回什么资源。对于的get请求如下所示:get/http/1.1host:
22、.cnuser-agent:mozilla/5.0(windows;u;windowsnt5.1;en-us;rv:1.7.6) gecko/20050225firefox/1.0.1connection:keep-alive 请求行的第一部分说明了该请求是get请求。该行的第二部分是一个斜杠(/),用来说明请求的是该域名的根目录。该行的最后一部分说明使用的是http 1.1版本(另一个可选项是1.0)。那么请求发到哪里去呢?这就是第二行的内容。第2行是请求的第一个首部,host。首部host将指出请求的目的地。结合host和上一行中的斜杠(/),可以通知服务器请求的是.
23、cn/(http 1.1才需要使用首部host,而原来的1.0版本则不需要使用)。第三行中包含的是首部user-agent,服务器端和客户端脚本都能够访问它,它是浏览器类型检测逻辑的重要基础。该信息由你使用的浏览器来定义(在本例中是firefox 1.0.1),并且在每个请求中将自动发送。最后一行是首部connection,通常将浏览器操作设置为keep-alive(当然也可以设置为其他值,但这已经超出了本文讨论的范围)。注意,在最后一个首部之后有一个空行。即使不存在请求主体,这个空行也是必需的。如果要获取一个诸如/books的.c
24、n域内的页面,那么该请求可能类似于:get/books/http/1.1host:user-agent:mozilla/5.0(windows;u;windowsnt5.1;en-us;rv:1.7.6)gecko/20050225firefox/1.0.1connection:keep-alive 注意只有第一行的内容发生了变化,它只包含url中后面的部分。要发送get请求的参数,则必须将这些额外的信息附在url本身的后面。其格式类似于:url ? name1=value1&name2=value2&.&namen=valuen该信息称
25、之为查询字符串(query string),它将会复制在http请求的请求行中,如下所示:get/books/? name1=value1&name2=value2&.&namen=valuenhttp/1.1host:user-agent:mozilla/5.0(windows;u;windowsnt5.1;en-us;rv:1.7.6)gecko/20050225firefox/1.0.1connection:keep-alive另一方面,post请求在请求主体中为服务器提供了一些附加的信息。通常,当填写一个在线表单并提交它时,这些填入的数据将以post请求的方
26、式发送给服务器。以下就是一个典型的post请求:post/http/1.1host:user-agent:mozilla/5.0(windows;u;windowsnt5.1;en-us;rv:1.7.6) gecko/20050225firefox/1.0.1content-type:application/x-www-form-urlencodedcontent-length:40connection:keep-alivename=professional%20ajax&publisher=wiley从上面可以发现, post请求和get请求之间有一些区别。首先
27、,请求行开始处的get改为了post,以表示不同的请求类型。你会发现首部host和user-agent仍然存在,在后面有两个新行。其中首部content-type说明了请求主体的内容是如何编码的。浏览器始终以application/ x-www-form- urlencoded的格式编码来传送数据,这是针对简单url编码的mime类型。首部content-length说明了请求主体的字节数。在首部connection后是一个空行,再后面就是请求主体。与大多数浏览器的post请求一样,这是以简单的“名称值”对的形式给出的,其中name是professional ajax,publisher是wi
28、ley。你可以以同样的格式来组织url的查询字符串参数。正如前面所提到的,还有其他的http请求类型,它们遵从的基本格式与get请求和post请求相同。下一步我们来看看服务器将对http请求发送什么响应。http的响应如下所示,http响应的格式与请求的格式十分类似:status-lineheadersblanklineresponse-body正如你所见,在响应中唯一真正的区别在于第一行中用状态信息代替了请求信息。状态行(status line)通过提供一个状态码来说明所请求的资源情况。以下就是一个http响应的例子: http/1.1200okdate:sat,31dec200523:59
29、:59gmtcontent-type:text/html;charset=iso-8859-1content-length:122htmlheadtitlehomepage/title/headbody!-bodygoeshere-/body/html在本例中,状态行给出的http状态代码是200,以及消息ok。状态行始终包含的是状态码和相应的简短消息,以避免混乱。最常用的状态码有: 200 (ok): 找到了该资源,并且一切正常。 304 (not modified): 该资源在上次请求之后没有任何修改。这通常用于浏览器的缓存机制。 401 (unauthorized):客户端无权访问该资源
30、。这通常会使得浏览器要求用户输入用户名和密码,以登录到服务器。 403 (forbidden):客户端未能获得授权。这通常是在401之后输入了不正确的用户名或密码。 404 (not found):在指定的位置不存在所申请的资源。 在状态行之后是一些首部。通常,服务器会返回一个名为date的首部,用来说明响应生成的日期和时间(服务器通常还会返回一些关于其自身的信息,尽管并非是必需的)。接下来的两个首部大家应该熟悉,就是与post请求中一样的content-type和content-length。在本例中,首部content-type指定了mime类型html(text/html),其编码类型是
31、iso-8859-1(这是针对美国英语资源的编码标准)。响应主体所包含的就是所请求资源的html源文件(尽管还可能包含纯文本或其他资源类型的二进制数据)。浏览器将把这些数据显示给用户。注意,这里并没有指明针对该响应的请求类型,不过这对于服务器并不重要。客户端知道每种类型的请求将返回什么类型的数据,并决定如何使用这些数据。 2.1.3 java中的多线程现在将多线程下载同一个文件的原理讲述一下3:1、首先得到要下载的文件的长度,这是通过http的head命令得到其长度。2、根据长度和线程数,确定各线程所下载的数据范围。通过http的get命令,这里需要指定from和to.3、创建一个文件,这个文
32、件是一个空文件,不需要事先生成与下载文件同样大小的空文件。给每个线程只需要传递其打开的文件句柄即可。4、创建各个下载线程,每个线程接受到数据后就保存到相应的位置上去。这里不需要对文件加锁,因为操作系统一级本身对文件的i/o有锁的,我们的应用不用管,而且各个线程所写的文件位置是不一样的,每一线程负责下载和写一段数据。每个线程都记录下来了当前已经下载到的位置,这样若有线程出错了,可以从断点处继续下载。5、等各线程都下载完各自的数据块后,最后中关闭这个文件。注意:这里的文件打开时一定要以二制打开,否则在调用fseek时将导致位置定位不正确。2.1.4断点续传原理其实断点续传的原理很简单,就是在htt
33、p的请求上和一般的下载有所不同而已。打个比方,浏览器请求服务器上的一个文时,所发出的请求如下: 假设服务器域名为,文件名为down.zip。 get /down.zip http/1.1 accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint, */* accept-language: zh-cn accept-encoding: gzip, def
34、late user-agent: mozilla/4.0 (compatible; msie 5.01; windows nt 5.0) connection: keep-alive服务器收到请求后,按要求寻找请求的文件,提取文件的信息,然后返回给浏览器,返回信息如下: 200 content-length=106786028 accept-ranges=bytes date=mon, 30 apr 2001 12:56:11 gmt etag=w/02ca57e173c11:95b content-type=application/octet-stream server=microsoft-
35、iis/5.0 last-modified=mon, 30 apr 2001 12:56:11 gmt 所谓断点续传,也就是要从文件已经下载的地方开始继续下载。所以在客户端浏览器传给web服务器的时候要多加一条信息-从哪里开始。 下面是传递请求信息给web服务器的例子,要求从2000070字节开始。get /down.zip http/1.0 user-agent: netfox range: bytes=2000070- accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 仔细看一下就会发现多了一行range: bytes
36、=2000070-;这一行的意思就是告诉服务器down.zip这个文件从2000070字节开始传,前面的字节不用传了。服务器收到这个请求以后,返回的信息如下: 206 content-length=106786028 content-range=bytes 2000070-106786027/106786028 date=mon, 30 apr 2001 12:55:20 gmt etag=w/02ca57e173c11:95b content-type=application/octet-stream server=microsoft-iis/5.0 last-modified=mon, 3
37、0 apr 2001 12:55:20 gmt 和前面服务器返回的信息比较一下,就会发现增加了一行: content-range=bytes 2000070-106786027/106786028 返回的代码也改为206了,而不再是200了。 2.1.5对象序列化 对象的序列化实质就是对对象进行操作。序列化:就是把类的对象当时的状态持久化到在文件上。当进行序列化的时候,jvm首先会调用writereplace方法,在这个阶段我们可以张冠李戴,将需要进行序列化的对象换成我们指定的对象。然后jvm会调用writeobject方法,将对象中的属性一个一个的进行序列化,我们可以在这个方法中控制哪些属性
38、需要序列化。反序列化:就是把文件中的对象读出来并恢复。当反序列化的时候,jvm首先会调用readobject方法,将我们刚刚在writeobject方法中序列化好的属性,解析回来。然后在readresolve方法中,我们也可以指定jvm返回我们特定的对象。优点:使用序列化可以象存储文本或者数据一样存储对象。比如说:程序在执行过程中突然遇到断电或者其他故障导致程序终止,那么对象当前的工作状态也就会丢失,这对于有些应用是可怕的。用对象序列化就可以解决这个问题,因为它可以将对象的全部内容保存于磁盘文件,这样对象的执行状态也就被存储了,到需要时还可以将其从文件中按原样再读取出来,这样就解决了数据的丢失
39、的问题。怎样实现:需要被序列化的对象必须实现serializable接口,该接口没有需要实现的方法,implements serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:fileoutputstream)来构造一个objectoutputstream(对象流)对象,接着,使用objectoutputstream对象的writeobject(object obj)方法就可以将参数为obj的对象写出(即保存其状态)。要恢复的话则用输入流,将对象从文件中恢复到使用处。 2.2 java概述2.2.1 java语言特点1. 平台无关性7java引进虚拟机原理,并运行于
40、虚拟机,实现不同平台之间的java接口。java的数据类型与机器无关。2. 安全性java的编程类似c+,但舍弃了c+的指针对存储器地址的直接操作,程序运行时,内存由操作系统分配,这样可以避免病毒通过指针入侵系统。它提供了安全管理器,防止程序的非法访问。3. 面向对象 java吸收了c+面向对象的概念,将数据封装于类中,实现了程序的简洁性和便于维护性,使程序代码可以只需一次编译就可反复利用。4. 分布式java建立在tcp/ip网络平台上,提供了用http和ftp协议传送和接收信息的库函数,使用其相关技术可以十分方便的构建分布式应用系统。5. 健壮性java致力与检查程序在编译和运行时的错误,
41、并自动回收内存,减少了内存出错的可能性。java取消了c语言的结构、指针、#define语句、多重继承、goto语句、操作符、重载等不易被掌握的特性,提供垃圾收集器自动回收不用的内存空间。2.2.2 java的常用包介绍l java.lang包2:java的核心类库,包含了运行java程序必不可少的系统类,如基本数据类型、基本数学函数、字符串处理、线程、异常处理类等,系统缺省加载这个包。l java.io包:java语言的标准输入/输出类库,如基本输入/输出流、文件输入/输出、过滤输入/输出流等等。l java.util包:java的实用工具类库java.util包。在这个包中,java提供了
42、一些实用的方法和数据结构。例如,java提供日期(data)类、日历(calendar)类来产生和获取日期及时间,提供随机数(random)类产生各种类型的随机数,还提供了堆栈(stack)、向量(vector) 、位集合(bitset)以及哈希表(hashtable)等类来表示相应的数据结构。包含如处理时间的date类,处理变成数组的vector类,以及stack和hashtable类。l java.lang.reflect包:提供用于反射对象的工具。l java.awt.image包:处理和操纵来自于网上的图片的java工具类库。l j包:实现网络功能的类库有socket类、
43、serversocket类。l java.awt包:构建图形用户界面(gui)的类库,低级绘图操作graphics类,图形界面组件和布局管理如 checkbox类、container类、layoutmanger接口等,以及界面用户交互控制和事件响应,如event类。l java.awt.event包:gui事件处理包。 2.3开发平台的选择考虑到本系统的性能要求和现有的条件,本文选择了windows xp中文版作为开发、测试和运行的平台。因为windows操作系统是目前应用最广的操作系统。它以全新的图形界面,简单快捷的操作方式,支持多媒体功能等特点而成为软件发展的流行趋势。为了测试软件的跨平台
44、特性,本文选用red hat9.0作为该软件的测试平台。2.3.1软件选择开发多线程的语言甚多,目前世界上流行的主流开发语言有:java,c+,c#,.net 等。但考虑到本程序的开源以及跨平台特性,本文选用sun公司推出的适用于创建服务器应用程序和服务的java 2平台标准版(java 2 platform standard edition,j2se ,version1.5.02)以及ibm公司的开源eclipse(version 3.2.2)作为本系统的开发工具。2.3.2关于eclipse eclipse1 是一个开放源代码的、基于 java 的可扩展开发平台。就其本身而言,它只是一个框
45、架和一组服务,用于通过插件组件构建开发环境。幸运的是,eclipse 附带了一个标准的插件集,包括 java 开发工具(java development tools,jdt)。虽然大多数用户很乐于将 eclipse 当作 java ide 来使用,但 eclipse 的目标不仅限于此。eclipse 还包括插件开发环境(plug-in development environment,pde),这个组件主要针对希望扩展 eclipse 的软件开发人员,因为它允许他们构建与 eclipse 环境无缝集成的工具。由于 eclipse 中的每样东西都是插件,对于给 eclipse 提供插件,以及给用户
46、提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。这种平等和一致性并不仅限于 java 开发工具。尽管 eclipse 是使用 java 语言开发的,但它的用途并不限于 java 语言;例如,支持诸如 c/c+、cobol 和 eiffel 等编程语言的插件已经可用,或预计会推出。eclipse 框架还可用来作为与软件开发无关的其他应用程序类型的基础,比如内容管理系统。eclipse 是一个开放源代码的、基于 java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。第三章 需求分析3.1用户需求分析随着internet的发展,进入
47、信息时代后快速获得网络共享资源成为很简单的事情,人们对互联网也有了很大的依赖性。人们甚至希望只轻松点击鼠标就可以得到自己想要的东西。比如,针对一些专业的论坛提供了很多相关资料以方便人们阅读或了解;还有更多的人希望能过下载到他们喜欢听得音乐、好看的图片、喜欢的电影等等。也可以看出人们在上网时再也不单是打开浏览器来浏览网页,越来越多的人们开始使用下载软件来获取资源。同时人们也更希望使用更新更快的下载软件。由于用户下载需求的增大,也要求下载软件能够迅速完成对资源的下载。多线程程序设计可以很好的解决程序并发的问题。最恰当的比喻就是用户会感到cpu似乎同时出现在两个地方,在下载软件中应用多线程技术可以理
48、解为将一个下载任务分成若干份来完成,其中的并发控制将使下载的效率大大提高。 由于下载资源是一个过程,当中用到的时间可能会很长。那么在很长的这段时间中很有可能会出现很多的意外情况使下载中断或是停止,比如电源意外被切断、网络中断、或是操作系统故障导致系统重新启动。这些原因都会导致下载的中断,但是当用户重新下载资源时发现原来下载的数据已经消失你还是要回头再来。断点续传就是用来解决这样的问题的,它的任务是在下载任务停止时,记录当前下载的信息并且利用网络协议中的一些重定向机制继续完成下载任务而不必从头再来。 随着使用下载工具的时间的增长,用户下载的资源越来越多,因此在下载列表中的项目也越来越多,越来越混
49、乱,因此为了便于管理和用户使用方便,用户迫切希望下载工具具有下载文件分类的功能。在下载任务的管理这一块,用户不仅希望下载工具具有下载一个一个资源的功能,而且具有批量下载有些相似的或有关联的资源的功能。还有些特殊情况下,用户在下载任务开始后由于种种原因希望放弃资源的下载,这就要求下载工具具有删除任务的功能了。为了对下载任务进行掌控,用户往往具有设置下载任务的线程数,文件下载网址,文件下载存储目录和在下载过程中对下载任务的状态进行监控等功能需求。鉴于某些软件使用初学者甚至某些电脑初学者的实际情况,他们往往需要系统有一个格外的帮助文档,使他们能够更快、更好地学会使用断点续传下载软件,提高效率。3.2
50、业务流分析多线程断点续传的业务流程:首先由用户进入软件系统,在新建任务中填写必要的下载资源的相关属性,比如相关资源下载地址url、存储路径等。由软件发送http消息请求,然后服务器根据请求返回响应消息。确认无误就可以启动线程开始下载资源。将缓存中存储的数据最终存储到目的存储路径。此外,系统为用户提供了一些对任务的基本操作,比如,停止、继续、删除等。新建任务填写下载地址url;存储路径;(分类路径和文件路径);文件名。server发送http或ftp请求响应请求返回文件地址建立连接开始下载任务下载结束停止;继续;删除。图3-1下载工具的业务流分析图fig 3-1 traffic flow ana
51、lysis3.3系统环境 操作系统:microsoft windows xp开发工具:eclipse3.2.2,notepad2开发平台:jdk1.5数据环境:txt文本 开发语言:java3.3.1开发环境配置过程(1)安装配置jdk:执行j2sdk安装程序,按默认设置进行安装,也可自定义路径,但需修改下面的配置配置j2sdk环境变量:我的电脑-属性-高级-环境变量-系统变量中添加以下环境变量: java_home=c:program filesjavajdk1.5.02classpath=%java_home%libdt.jar;%java_home%libtools.jar;path=%
52、java_home%bin;%systemroot%system32;%systemroot%;%systemroot%system32wbem(2)安装,配置eclipse执行eclipse安装程序,按默认设置进行安装,也可自定义路径,但需修改下面的配置选择window-preferences-java-compiler把compiler compliance level项选择为5.0在java选项中选择installed jres,将jdk1.5.0_12勾上。选择general-workspace,把text file encoding设置为gb2312。第四章 系统设计4.1系统的设计
53、要点随着用户下载需求的增大,用户下载的资源越来越大,下载的过程也就越来越久,这就要求下载软件能够迅速完成对资源的下载,为了提高下载效率的问题,所以本系统采用多线程的方式来实现下载速率的提高。多线程的优点之一是所有线程都可以访问相同的全局变量和共享资源,它提供了程序设计的简捷性与便利性,提高了对信息处理的并发度,但也带来了数据的讹误或线程得不到某一资源而被饿死(即死锁)的可能性。为了避免这些现象的产生,线程在使用共享资源或对象前必须获得一个约束访问同步对象的权力,也就是通过同步的机制来控制这种权力的使用,这就是线程的安全问题。http协议是互联网中一个非常重要而且应用十分频繁的协议,所以本系统的
54、设计是基于http协议的。长期以来,“断点续传”始终是困扰使用者们的一大难题,眼看着已经下载到99%的软件,却由于突然掉线而前功尽弃的那种沮丧恐怕人人都经历过,于是本系统采用断点续传的方式来设计。本系统设计的基本目标就是利用编写一个时下流行的基于http协议的多线程断点续传的程序来研究java多线程与线程安全的机制。4.2系统总体功能结构通过对多线程断点续传下载软件的需求分析并结合实际情况的分析,本系统由下载分类管理、任务管理、设置管理、系统帮助四个主模块构成。本系统的功能结构图如图示:搜索功能javadownloader下载分类管理任务管理系统帮助设置管理选择已有目录新建目录新建下载任务暂停下载任务开始下载任务删除下载任务打开文件目录打开文件常规设置连接设置智能关机帮助文档待实现图4-1 系统功能结构图fig 4-1 system functional structure其中下载文件的分类模块主要是通过在新建下载任务时候设置下载文件的存储目录甚至新建一个存储目录的方式来实现(准备在2.0版本
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 屋面防水课件教学课件
- 2024年度大数据中心建设与运维合同
- 2024年度供应链管理与融资合同
- 2024年度CRM系统升级合同:增强销售合同管理功能
- 2024年度5G基站建设施工合同
- 2024年建筑工程环保分包合同
- 2024上海市室内装修合同协议书范本
- 2024年度企业合规性检查与咨询服务合同
- 2024年夫妻财产清算协议
- 2024天然气管网运营管理合同
- 文印竞标合同范本
- 2024年广东省深圳市中考历史试题
- 2024至2030年全球及中国强光手电筒行业发展现状调研及投资前景分析报告
- 2024年秋新教材北师大版一年级数学上册全册课件
- 加气站质量管理手册样本
- 2019版外研社高中英语必选择性必修一-四单词
- 古树名木养护复壮技术规范
- 2025年日历英文版纵向排版周一开始
- S7-1200PLC技术及应用 课件 项目17 步进电机控制
- 《生物技术制药》课程介绍与教学大纲
- 《现代农业技术推广》课件-第七组 农民问题专题调研
评论
0/150
提交评论