您的位置:首页 > 理论基础 > 计算机网络

Java——HTTP多线程下载,端口侦听和自启动服务

2013-02-18 20:11 302 查看
一个网友正好需要这个东西,我就把几个技术整合到了一起。包括三个部分,实现时也是逐个做到的

多线程的文件下载,HTTP协议

把这个功能做成一个HTTP的服务,侦听在某个端口上,方便非Java的系统使用

把这个功能封装为一个Windows服务,在机器启动时可以自动启动

我们逐个看程序。

一、多线程下载

这个主要使用了HTTP协议里面的一个Range参数,他设置了你读取数据的其实位置和终止位置。 经常使用flashget的用户在查看连接的详细信息时,应该经常看到这个东西。比如

Range:bytes=100-2000

代表从100个字节的位置开始读取,到2000个字节的位置结束,应读取1900个字节。

程序首先拿到文件的长度,然后分配几个线程去分别读取各自的一段,使用了

RandomAccessFile

进行随机位置的读写。

下面是完整的下载的代码。

package net.java2000.tools;

import java.io.BufferedInputStream;

import java.io.File;

import java.io.IOException;

import java.io.RandomAccessFile;

import java.net.URL;

import java.net.URLConnection;

/**

* HTTP的多线程下载工具。

*

* @author 赵学庆 www.java2000.net

*/

public class HTTPDownloader extends Thread {

  // 要下载的页面

  private String page;

  // 保存的路径

  private String savePath;

  // 线程数

  private int threadNumber = 2;

  // 来源地址

  private String referer;

  // 最小的块尺寸。如果文件尺寸除以线程数小于这个,则会减少线程数。

  private int MIN_BLOCK = 10 * 1024;

  public static void main(String[] args) throws Exception {

   HTTPDownloader d = new HTTPDownloader("http://www.xxxx.net/xxxx.rar", "d://xxxx.rar", 10);

   d.down();

  }

  public void run() {

   try {

    down();

   } catch (Exception e) {

    e.printStackTrace();

   }

  } 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐