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();
}
}
多线程的文件下载,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();
}
}
相关文章推荐
- Java——HTTP多线程下载,端口侦听和自启动服务
- Java技术体验,HTTP多线程下载,端口侦听和自启动服务
- Java技术体验,HTTP多线程下载,端口侦听和自启动服务
- Java技术体验,HTTP多线程下载,端口侦听和自启动服务
- Win7/Vista/Server2008下VS 环境 调试调用 HTTP.SYS 无法启动监听服务及启动后其他机器无法访问端口
- 搭建IIS服务器80端口却已被占用的问题和用了Sc config http start= disabled命令导致HTTP服务无法启动的解决方案
- Windows server 2008 HTTP.sys被禁用导致80端口被禁用和IIS服务无法启动解决办法
- Jenkins启动报端口被占用,解决办法FAILED ServerConnector@2a265ea9{HTTP/1.1}{0.0.0.0:8080}: java
- JavaWeb服务启动时,在后台启动加载一个线程进行Socket监听端口
- SpringBoot启动异常Caused by: java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.getServl
- Android上Java网络资源访问(二)使用HttpURLConnection多线程下载
- 【JAVA基础】0005--------ORACLE服务启动不了,或者报错
- java-列出Android设备中所有启动的服务,及判断某个服务是否开启! - 随心
- java发送http的get、post请求,测试端口
- 【Hadoop】hiveserver2 不能启动端口 10000 开启服务的相关经验总结
- Java web 服务启动时Xss溢出异常处理笔记
- Windows7下IIS服务端口冲突 Apache2.2服务器安装后服务无法启动:已解决
- oracle 数据库服务启动过程中停止响应(转:http://support.microsoft.com/kb/841180/zh-cn)
- JavaWeb 服务启动时,在后台启动加载一个线程。
- [20170305]使用JAVA实现Http多线程下载