知识大全 介绍怎样用Java设计下载软件
Posted 文件
篇首语:积极思考造成积极人生,消极思考造成消极人生。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 介绍怎样用Java设计下载软件相关的知识,希望对你有一定的参考价值。
介绍怎样用Java设计下载软件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
本文介绍了如何使用Java编写下载软件并实现多现程下载
网络蚂蚁 Falshget 等许多多线程下载软件都是网友的必备工具 利用这些工具可以快速从服务器上下载比较大的文件 这些工具的工作特性是把服务器端的文件分成几个段 每个段分别 同时进行下载 编写这类程序 第一 必须对HTTP协议有较为充分的了解 第二 有效使用多线程编程手段在软件上实现
HTTP 协议的简介
HTTP协议是一种超文本传输协议(Hypertext Transfer Protocol) 工作于网络应用层 自 年起广泛应用于WWW 的全球信息服务 HTTP协议的详细说明可以在网上查阅RFC RFC 等文档
HTTP 协议老的标准是HTTP/ 目前最通用的标准是HTTP/ HTTP/ 是在HTTP/ 基础上的升级 增加了一些功能 全面兼容HTTP/ HTTP/ 不支持文件断点续传 如果服务器使用HTTP/ 网络蚂蚁 的任何多线程下载程序都只能按单线程下载 好在目前的Web服务器绝大多数都采用了HTTP/ 所以 下面将基于HTTP/ 进行介绍
HTTP协议的相关重要命令
基于HTTP的浏览器浏览网页 下载文件时 工作原理类似客户机/服务器模式 浏览器向Web服务器发出一个HTTP请求行 Web服务器在收到有效的请求后 返回一个状态行或多个响应标题 一个空白行和相关文档 根据这一工作原理 下载程序必须实现向服务器发送请求和获取服务器响应状态的功能
向服务器发送 GET请求命令
一个HTTP请求由一个请求行 可选数目的请求标题 一个空白行 以及在POST情况下的一些额外的数据组成 请求行的格式是
请求方法 URI HTTP/版本号
GET 命令是浏览器常用的文档请求方法 在程序中间使用
GET URI HTTP/
向Web服务器发送请求行(行号 ) Java 代码如下
……
clientSocket = new Socket(host port) //打开要下载文件服务器的Socket
outStream = new PrintStream(clientSocket getOutputStream())
……
outStream println( GET +uri+ HTTP/ )
outStream println( Host +host)
outStream println( Accept */* )
outStream println( Referer )
outStream println()
……
注 第 行给出URL中的主机名和端口号 第 行说明客户端接收所有MIME类型 第 行方送一个空白行 表明请求行结束
获取服务器响应状态
在发送HTTP请求行以后 程序就可以读取服务器的响应状态了 HTTP响应状态行包括 HTTP 状态码和一些HTTP响应标题
) HTTP状态码
HTTP状态码格式是 HTTP/版本信息的数字表示 状态码例子如下
HTTP/ OK // 表示服务器支持HTTP/ 协议 成功
HTTP/ OK // 表示服务器支持HTTP/ 协议 成功
HTTP/ Not Found // 表示服务器支持HTTP/ 协议 访问文件没有找到
在程序中间 如果读到 HTTP/ OK 这样的字符串 表明欲下载文件存在 该服务器支持断点续传 可以使用多线程下载 如果读到 HTTP/ OK 这样的字符串 表明欲下载文件存在 但该服务器不支持断点续传 只可以使用单线程下载
……
while ((line=inStream readLine()) != null) //将服务器响应状态读到line
……
if(line substring( ) equals( HTTP/ ) ) //判断是否支持HTTP/
if(line charAt( )== )
System out println( server use )
threadcount=
if(!(line substring( )) equals( )) //判断请求是否成功
System out println( ERROR +line)
return false
) 读取重要的响应标题 获得要下载文档的文件长度
如果HTTP状态码表明访问成功 服务器会回送一些标题行 我们最关注的是Content Length 这一行 比如 如果服务器回送 Content Length 表明请求文件的长度是1000字节 所以读取这一行信息 可以得到文件的长度信息
……
if(line substring( ) equals( Content Length ) )
filelength=Long parseLong(line substring( ) trim())
System out println( file length +filelength)
……
向服务器发送断点续传请求
如上所述 如果服务器支持HTTP/ 再次向服务器发送GET请求
……
outStream println( GET +uri+ HTTP/ )
outStream println( Host +host)
outStream println( Accept */* )
outStream println( RANGE bytes= +(fileblocklength)*thisthreadid+ )
outStream println()
……
第 行是关键 RANGE bytes= 是HTTP/ 新增内容 HTTP/ 每次传送文件都是从文件头开始 即0字节处开始 RANGE bytes=XXXX 表示要求服务器从文件XXXX字节处开始传送 这就是我们平时所说的断点续传!
分割文件 多线程下载
使用多线程编程技术 同时启动多个线程 根据线程个数 计算文件分割位置 向服务器发送几个不同的下载断点 同时接受数据并写入文件 就可以实现多线程下载了
……
raf=new RandomAccessFile(file rw ) //以随机存取方式打开文件
……
synchronized(raf) //按同步方式把各个线程得到数据分别写入文件
raf seek(thisthreadid*(filelength/threadcount)+k*buflength)
raf write(readbytes)
……
cha138/Article/program/Java/hx/201311/26242
相关参考
知识大全 以前没有接触过软件编程,java的初学者要怎样才能学好
以前没有接触过软件编程,java的初学者要怎样才能学好不知道你以前是否有接触过其他编程语言例如CC++java很好学的如果以前有过编程经验的那就学起来很轻松了鄙人是计算机专业的本科生学java表示没压
用JAVA编制电子白板软件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 随着Internet的
Java动态程序设计——反射介绍 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Java动态程序
用Java制作网络文件下载系统 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 由于Linux操作
用JAVA编制Internet电子白板软件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 前言
学习JAVA游戏开发要用什么软件编程? 以下文字资料是由(本站网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!学习JAVA游戏
Java设计模式之Iterator模式介绍 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!所谓Ite
JavaSocket线程的设计原理介绍 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! JavaS
正常情况下一个设计模式描述了一个被证实可行的方案这些方案非常普遍是具有完整定义的最常用的模式一般模式有个基本要素模式名称(patternname)问题(proble
知识大全 我是个计算机软件初学者,想学一门语言,我选择JAVA作为我的初学语言,不知道该怎样学习,帮大家指点下!
我是个计算机软件初学者,想学一门语言,我选择JAVA作为我的初学语言,不知道该怎样学习,帮大家指点下! 以下文字资料是由(本站网www.cha138.com)小编为大家