WEB开发网
开发学院软件开发Java 用java多线程断点续传实践 阅读

用java多线程断点续传实践

 2009-09-24 00:00:00 来源:WEB开发网   
核心提示: 另外,为了避免线程因为网络原因而阻塞,用java多线程断点续传实践(5),设置了ConnectTimeout和ReadTimeout,代码⑤、⑥处,如果返回不符合要求的状态码,则结束线程, setConnectTimeout设置的连接的超时时间,而setReadTimeout设置的是读取数据的超

另外,为了避免线程因为网络原因而阻塞,设置了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 Error 服务器遇到了意料不到的情况,不能完成客户的请求。

g) 503 Service Unavailable 服务器由于维护或者负载过重未能应答。例如,Servlet可能在数据库连接池已满的情况下返回503。

在这些状态里面,只有200与206才是我们需要的正确的状态。所以在代码⑥处,进行了状态码的判断,如果返回不符合要求的状态码,则结束线程,返回主线程并提示报错。

上一页  1 2 3 4 5 6 7 8  下一页

Tags:java 线程 断点

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接