快速业务通道

用java多线程断点续传实践 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
}          }      } }

用java多线程断点续传实践(3)

时间:2010-12-22 BlogJava bitmap

在ChildThread的构造方法中,除了设置一些从主线程中带来的id, 起始位置 之外,就是新建了一个临时文件用来存放当前线程的下载数据。临时文件的命名 规则是这样的:下载的目标文件名+”_”+线程编号。

现在让我们来看看从网络中读数据是怎么读的。我们通过URLConnection来获 得一个http的连接。有些网站为了安全起见,会对请求的http连接进行过滤,因 此为了伪装这个http的连接请求,我们给httpHeader穿一件伪装服。下面的 setHeader方法展示了一些非常常用的典型的 httpHeader的伪装方法。比较重要 的有:Uer-Agent模拟从Ubuntu的firefox浏览器发出的请求;Referer模拟浏览 器请求的前一个触发页面,例如从skycn站点来下载软件的话,Referer设置成 skycn的首页域名就可以了;Range就是这个连接获取的流文件的起始区间。

private void setHeader(URLConnection con) {      con.setRequestProperty("User-Agent", "Mozilla/5.0  (X11; U; Linux i686; en-US; rv:1.9.0.3) Gecko/2008092510  Ubuntu/8.04 (hardy) Firefox/3.0.3");      con.setRequestProperty("Accept-Language", "en- us,en;q=0.7,zh-cn;q=0.3");      con.setRequestProperty("Accept-Encoding", "aa");      con.setRequestProperty("Accept-Charset", "ISO-8859-1,utf- 8;q=0.7,*;q=0.7");      con.setRequestProperty("Keep-Alive", "300");      con.setRequestProperty("Connection", "keep-alive");      con.setRequestProperty("If-Modified-Since", "Fri, 02 Jan  2009 17:00:05 GMT");      con.setRequestProperty("If-None-Match", "\"1261d8-4290- df64d224\"");      con.setRequestProperty("Cache-Control", "max-age=0");      con.setRequestProperty("Referer",  "http://http://www.bt285.cn"); }

另外,为了避免线程因为网络原因而阻塞,设置了ConnectTimeout和 ReadTimeout,代码⑤、⑥处。 setConnectTimeout设置的连接的超时时间,而 setReadTimeout设置的是读取数据的超时时间,发生超时的话,就会抛出 socketTimeout异常,两个方法的参数都是超时的毫秒数。

这里对超时的发生,采用的是等候一段时间重新连接的方法。整个获取网络 连接并读取下载数据的过程都包含在一个循环之中(代码③处),如果发生了连 接或者读取数据的超时,在抛出的异常里面就会sleep一定的时间(代码⑩处) ,然后continue,再次尝试获取连接并读取数据,这个时间可以通过 setSleepSeconds()方法来设置。我们在迅雷等下载工具的使用中,经常可以看 到状态栏会输出类似“连接超时,等待*秒后重试”的话,这个就是通过 ConnectTimeout,ReadTimeout来实现的。

连接建立好之后,我们要检查一下返回响应的状态码。常见的Http Response Code有以下几种:

a) 200 OK 一切正常,对GET和POST请求的应答文档跟在后面。

b) 206 Partial Content 客户发送了一个带有Range头的GET请求,服务器完 成。

c) 404 Not Found 无法找到指定位置的资源。这也是一个常用的应答。

d) 414 Request URI Too Long URI太长。

e) 416 Requested Range Not Satisfiable 服务器不能满足客户在请求中指 定的Range头。

f) 500 Internal Server Erro

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号