基于java的多线程跨平台下载软件的实践毕业论文内容摘要:
器下载原理图 Fig 21 Server Download principle 第二类 : P2P(Peer To Peer)下载 ; BT、 EMULE、 VAGAA 都属于此类 , 虽然协议不一样 , 但是下载方式都是根据文件信息 , 从互联网中寻找正在下载该文件的用户 , 并从他们那里下载。 当然软件会寻找用户 , 并从多个用户下载自己没有的部分 , 而将自己已下载的而别人没有的上传给别人 , 相对与别 8 人来说 , 你的上传就是他的下载了。 此类软件就是在浩瀚的互联网中寻找已经下载或者正在下载的那些文件 , 所有的下载用户形成一个连锁网络 , 每个人都从其他人那里获得 ,同时也给别人上传 , 体现了人人平等的关系。 由于没有固定的服务器 , 每个人即充当客户端也充当 服务器 , 人越多下载 速度 越快是这类下载的优点。 图 22 P2P下载基本原理图 Fig 22 P2P principle HTTP 协议简介 在 TCP/IP 体系结构中 , HTTP 属于应用层协议 , 位于 TCP/IP 协议的顶层。 浏览 Web时 , 浏览器通过 HTTP 协议与 Web 服务器交换信息。 这些信息(文档)类型的格式由 MIME定义。 HTTP 协议具有以下的特点 : 1. HTTP 按客户 /服务器模式工作 HTTP 支持客户(一般情况是浏览器)与服务器的通讯 , 相互传输数据。 HTTP 定义的事务处理由以下四步组成 : o 客户与服务器建立连接 ; o 客户向服务器提出请求 ; 9 o 如果请求被接受 , 则服务器送回响应 , 在响应中包括状态码和所需的文件 ; o 客户与服务器断开连接 ; o 一次 HTTP 操作称为一次事务( transaction)。 2. HTTP 是无状态的 也就是说 , 浏览器和服务器每进行一次 HTTP 操作 , 就建立一次连接 , 但任务结束就中断连接。 3. HTTP 使用元信息作为头标 HTTP 对所有事务都加了 头标( header)。 也就是说 , 在主要数据前加上一块信息 ,称为 元信息( metainformation)。 它使服务器能够提供正在传送数据的有关信息。 例如 , 传送对象是哪种类型 , 是用哪种语言书写的等。 从功能上讲 , HTTP 支持四类元信息 : 一般信息头标、请求头标、响应头标和实体头标。 4. HTTP 支持两种请求和响应格式 HTTP 由不同的两部分组成 , 一是从浏览器发往服务器的请求 , 二是服务器对客户的响应。 HTTP 支持两种请求和响应 , 即简单请求与完全请求和简单响应与完全响应。 5. HTTP 是基于文本的简单协议。 HTTP的请求 [13] HTTP 的常用请求方法 : 表 21 HTTP的常用请求方法 Table 21 HTTP request method 方 法 说 明 GET 请求读取一个 Web页面 HEAD 请求读取一个 Web页面的头标 PUT 请求存储一个 Web页面 POST 附加到命名资源中 DELETE 删除 Web页面 10 LINK 连接两个已有资源 UNLINK 取消两个资源之间的已有连接 HTTP 请求的格式如下所示 : < requestline> < headers> < blank line> [< requestbody> ] 在 HTTP 请求中 , 第一行必须是一个请求行( request line) , 用来说明请求类型、要访问的资源以及使用的 HTTP 版本。 紧接着是一个首部( header)小节 , 用来说明服务器要使用的附加信息。 在首部之后是一个空行 , 再此之后可以添加任意的其他数据 [称之为主体( body) ]。 在 HTTP 中 , 定义了大量的请求类型 , 不过开 发人员关心的只有 GET 请求和 POST 请求。 只要在 Web浏览器上输入一个 URL, 浏览器就将基于该 URL向服务器发送一个 GET请求 ,以告诉服务器获取并返回什么资源。 对于 的 GET 请求如下所示 : GET / HTTP/ Host: UserAgent: Mozilla/ (Windows。 U。 Windows NT。 enUS。 rv:.6) Gecko/20200225 Firefox/ Connection: KeepAlive 请求行的第一部分说明了该请求是 GET 请求。 该行的第二部分是一个斜杠( /) , 用来说明请求的是该域名的根目录。 该行的最后一部分说明使用的是 HTTP 版本(另一个可选项是 )。 那么请求发到哪里去呢。 这就是第二行的内容。 第 2行是请求的第一个首部 , HOST。 首部 HOST 将指出请求的目的地。 结合 HOST 和上一行中的斜杠( /) , 可以通知服务器请求的是 ( HTTP 才需要使用首部 HOST, 而原来的 版本则不需要使用)。 第三行中包含的是首部 UserAgent, 服务器端和客户 端脚本都能够访问它 , 它是浏览器类型检测逻辑的重要基础。 该信息由你使用的浏览器来定义(在本例中是 Firefox ) , 并且在每个请求中将自动发送。 最后 11 一行是首部 Connection, 通常将浏览器操作设置为 KeepAlive(当然也可以设置为其他值 , 但这已经超出了本 文 讨论的范围)。 注意 , 在最后一个首部之后有一个空行。 即使不存在请求主体 , 这个空行也是必需的。 如果要获取一个诸如 的 域内的页面 ,那么该请求可能类似于 : GET /books/ HTTP/ Host: UserAgent: Mozilla/ (Windows。 U。 Windows NT。 enUS。 rv:.6) Gecko/20200225 Firefox/ Connection: KeepAlive 注意只有第一行的内容发生了变化 , 它只包含 URL 中 后面的部分。 要发送 GET请求的参数 , 则必须将这些额外的信息附在 URL 本身的后面。 其格式类似于 : URL ? name1=value1amp。 name2=value2amp。 ...amp。 nameN=valueN 该信息称之为查询字符串( query string) , 它将会复制在 HTTP 请求的请求行中 , 如下所示 : GET /books/? name1=value1amp。 name2=value2amp。 ...amp。 nameN=valueN HTTP/ Host: UserAgent: Mozilla/ (Windows。 U。 Windows NT。 enUS。 rv:.6) Gecko/20200225 Firefox/ Connection: KeepAlive 另一方面 , POST 请求在请求主体中为服务器提供了一些附加的信息。 通常 , 当填写一个在线表单并提交它时 , 这些填入的数据将以 POST 请求的方式发送给服务器。 以下就是一个典型的 POST 请求 : POST / HTTP/ Host: 12 UserAgent: Mozilla/ (Windows。 U。 Windows NT。 enUS。 rv:.6) Gecko/20200225 Firefox/ ContentType: application/xformurlencoded ContentLength: 40 Connection: KeepAlive name=Professional%20Ajaxamp。 publisher=Wiley 从上面可以发现 , POST 请求和 GET 请求之间有一些区别。 首先 , 请求行开始处的 GET改为了 POST, 以表示不同的请求类型。 你会发现首部 Host 和 UserAgent 仍然存在 , 在后面有两个新行。 其中首部 ContentType 说明了请求主体的内容是如何编码的。 浏览器始终以 application/ xform urlencoded 的格式编码来传送数据 , 这是针对简单 URL 编码的 MIME 类型。 首部 ContentLength 说明了请求主体的字节数。 在首部Connection 后是一个空行 , 再后面就是请求主 体。 与大多数浏览器的 POST 请求一样 ,这是以简单的 “ 名称 — 值 ” 对的形式给出的 , 其中 name 是 Professional Ajax,publisher 是 Wiley。 你可以以同样的格式来组织 URL 的查询字符串参数。 正如前面所提到的 , 还有其他的 HTTP 请求类型 , 它们遵从的基本格式与 GET 请求和 POST请求相同。 下一步我们来看看服务器将对 HTTP 请求发送什么响应。 HTTP的 响应 如下所示 , HTTP 响应的格式与请求的格式十分类似 : < statusline> < headers> < blank line> [< responsebody> ] 正如你所见 , 在响应中唯一真正的区别在于第一行中用状态信息代替了请求信息。 状态行( status line)通过提供一个状态码来说明所请求的资源情况。 以下就是一个 HTTP响应的例子 : HTTP/ 200 OK Date: Sat, 31 Dec 2020 23:59:59 GMT ContentType: text/html; charset=ISO88591 ContentLength: 122 13 < html> < head> < title> Homepage< /title> < /head> < body> < ! body goes here > < /body> < /html> 在本例中 , 状态行给出的 HTTP 状态代码是 200, 以及消息 OK。 状态行始终包含的是状态码和相应的简短消息 , 以避免混乱。 最常用的状态码有 : 200 (OK): 找到了该资源 , 并且一切正常。 304 (NOT MODIFIED): 该资源在上次请求之后没有任何修改。 这通常用于浏览器的缓存机制。 401 (UNAUTHORIZED):客户端无权访问该资源。 这通常会使得浏览器要求用户输入用户名和密码 , 以登录到服务器。 403 (FORBIDDEN):客户端未 能获得授权。 这通常是在 401 之后输入了不正确的用户名或密码。 404 (NOT FOUND):在指定的位置不存在所申请的资源。 在状态行之后是一些首部。 通常 , 服务器会返回一个名为 Date 的首部 , 用来说明响应生成的日期和时间(服务器通常还会返回一些关于其自身的信息 , 尽管并非是必需的)。 接下来的两个首部大家应该熟悉 , 就是与 POST 请求中一样的 ContentType 和ContentLength。 在本例中 , 首部 ContentType 指定了 MIME 类型 HTML( text/html) ,其编码类型是 ISO88591(这是针对美国英语资源的编码标准)。 响应主体所包含的就是所请求资源的 HTML 源文件(尽管还可能包含纯文本或其他资源类型的二进制数据)。 浏览器将把这些数据显示给用户。 注意 , 这里并没有指明针对该响应的请求类型 , 不过这对于服务器并不重要。 客户端知道每种类型的请求将返回什么类型的数据 , 并决定如何使用这些数据。 Java 中的多线程 现在将多线程下载同一个文件的原理讲述一下 [3]: 14 首先得到要下载的文件的长度 , 这是通过 HTTP 的 HEAD 命令得到其长度。 根据长度和线程数 , 确定各线程所下载 的数据范围。 通过 HTTP 的 Get 命令 , 这里需要指定 From 和 To. 创建一个文件 , 这个文件是一个空文件 , 不需要事先生成与下载文件同样大小的空文件。 给每个线程只需要传递其打开的文件句柄即可。 创建各个下载线程 , 每个线程接受到数据后就保存到相应的位置上去。 这里不需要对文件加锁 , 因为操作系统一级本身对文件的 I/O 有锁的 , 我们的应用不用管 , 而且各个线程所写的文件位置是不一样的 , 每一线程负责下载和写一段数据。 每个线程都记录下来了当前已经下载到的位置 , 这样若有线程出错了 , 可以从断点处继续下载。 等各线程都下 载完各自的数据块后 , 最后中关闭这个文件。 注意 : 这里的文件打开时一定要以二制打开 , 否则在调用 fseek 时将导致位置定位不正确。 断点续传原理 其实断点续传的原理很简单 , 就是在 HTTP 的请求上和一般的下载有所不同而已。 打个比方 , 浏览器请求服务器上的一个文时 , 所发出的请求如下 : 假设服务器域名为 , 文件名为。 GET。基于java的多线程跨平台下载软件的实践毕业论文
相关推荐
设计与实现 系统设计是经过系统分析,然后由抽象至具体的过程,本阶段的主要目标是把在分析阶段中的抽象概念化作能够实现,使之成为有具体功能的模块,提供支持给系统代码设计。 在系统设计的阶段种,应该尽可能全面的思考全系统的功能与需求,由于情况的不同,有时还要考虑到系统性能。 打砖块游戏的画面简单,功能也不怎么复杂,系统资源占用很少,所以,在这里不过于考虑性能需求,下面对游戏的详细设计过程做一个说明。
表方块的周围的 8 个方块中共有多少颗雷。 (4) 如果用户认为某个方块下埋着雷,单击右键可以在方块上标识一个用户认为是雷的图标,即给出一个扫雷标记。 用户每标记出一个扫雷标记 (无论用户的标记是否正确 ),程序将显示的剩余雷数减少一个。 (5)当用户点中雷时,将有“你输了”的提示出现,胜利时,将有“你赢 了”的提示出现。 功能需求分析 本程序为 java 课程设计。 参考 Windows
量及访问性质 Servlet 可以是其它服务的客户端程序,例如,它们可以用于分布式的应用系统中,可以从本地硬盘,或者通过网络从远端硬盘激活 Servlet 的作用。 Servlet 可被链接 (chain)。 一个 Servlet 可以调用另一个或一系列 Servlet,即成为它的客户端。 山东财经大学学士学位论文 3 采用 Servlet Tag 技术,可以在 JSP页面中动态调用
SQL 语句发送到相应的任何一种数据库。 Java 与 JDBC 的结合 , 使程序员可以只写一次数据库应用软件后 ,就能在各种数据库系统上运行。 由于 Java 语言具有健壮性、安全、易使用、易理解和自动下载到网络等优点 , 因此 , 它是数据库应用的一个极好的基础语言。 现在需要找到一种能使 Java 应用与各种不同数据库对话的方式 , 而 JDBC 正是实现这种对话的一种机制。 JDBC
③图像浏览区 ①操作区 ④图像窗口 8 面的外观风格的切换,只能有一种外观风格被选择,因此使用 JRadioButtonMenuItem 和ButtonGroup。 操作区内另有工具栏, 使用 JToolBar,为了让工具栏能更好地被拖出和放回原位,而不影响界面的布局,使用自定义的类 JToolBarPanel,该类是 JPanel 的子类,并实现了ContainerListener 接口
系统升级:当企业内部通讯系统有更新的版本时,可以使用该功能进行软件升级。 系统设置:系统设置功能可以设置企业内部通讯系统的用户界面,公共路径等等,还可以设置公告的存放路径。 用于提示职工企业的公告信息。 用户搜索:在企业内部通讯系统第一次运行的时候,用户列表是空的,这时可以使用用户搜索功能搜索局域网内的所 有用户。 8 访问公共资源:该功能可以访问企业内部共用的一个公共得服务器上的资源