`

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

阅读更多
一个网友正好需要这个东西,我就把几个技术整合到了一起。包括三个部分,实现时也是逐个做到的

多线程的文件下载,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();
   }
  }
  /**
  * 下载操作
  *
  * @throws Exception
  */
  public void down() throws Exception {
   URL url = new URL(page); // 创建URL
   URLConnection con = url.openConnection(); // 建立连接
   int contentLen = con.getContentLength(); // 获得资源长度
   if (contentLen / MIN_BLOCK + 1 < threadNumber) {
    threadNumber = contentLen / MIN_BLOCK + 1; // 调整下载线程数
   }
   if (threadNumber > 10) {
    threadNumber = 10;
   }
   int begin = 0;
   int step = contentLen / threadNumber;
   int end = 0;
   for (int i = 0; i < threadNumber; i++) {
    end += step;
    if (end > contentLen) {
     end = contentLen;
    }
    new HTTPDownloaderThread(this, i, begin, end).start();
    begin = end;
   }
  }
  public HTTPDownloader() {
  }
  /**
  * 下载
  *
  * @param page 被下载的页面
  * @param savePath 保存的路径
  */
  public HTTPDownloader(String page, String savePath) {
   this(page, savePath, 10);

//来自互联网//
分享到:
评论

相关推荐

    基于boost::asio的http server3修改的echo服务器,有多线程,多侦听端口,超时处理等

    《基于Boost.ASIO的HTTP Server3:多线程、多端口与超时处理的Echo服务器实现》 Boost.ASIO是C++库中的一个强大组件,...通过对多线程、多端口监听和超时处理的理解,我们可以更好地理解和构建高性能的网络应用程序。

    多线程 TCIIP 侦听器

    2. 创建TCP侦听器类,包含启动和停止侦听的方法以及处理连接的回调函数: ```vbnet Public Class TCPListener Private tcpListener As TcpListener Private serverPort As Integer Public Sub New(port As ...

    商业编程-源码-端口侦听工具.zip

    端口侦听意味着一个进程正在等待来自网络的数据,表明该端口上的服务已经启动并准备好接收连接。 在商业编程中,端口侦听工具的应用场景包括: 1. **服务监控**:检查服务器上的服务是否正常运行,例如Web服务器、...

    多线程 TCP/IP 侦听器

    在IT领域,多线程TCP/IP侦听器是一种常见的网络通信工具,用于接收并处理来自多个客户端的并发连接。在VB.NET环境下,开发者可以利用System.Net.Sockets命名空间中的TcpListener类来实现这样的功能。本节将深入探讨...

    网络端口侦听程序,侦听本地打开端口的报文

    压缩包中的"Sniffer.exe"很可能是端口侦听程序的可执行文件,用户运行这个文件就可以启动程序来监听本地端口。而"readme.txt"文件通常是提供软件使用说明、安装步骤或注意事项的文档,用户在使用前应仔细阅读,以...

    AccessPort 端口侦听

    AccessPort 端口侦听是一款实用的网络监控工具,主要功能是帮助用户监测和分析计算机上特定端口的活动。作为一个绿色软件,它无需安装即可使用,这意味着它不包含额外的注册表项或者系统服务,因此不会占用不必要的...

    事例_多线程 TCIIP 侦听器(VB.NET)

    这个“多线程TCPIP侦听器”示例旨在演示如何利用VB.NET实现高效且稳定的网络通信。 首先,我们需要理解TCP/IP协议。TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,而IP(互联网协议)...

    单线程实现同时监听多个端口(windows平台c++代码)

    通过阅读和分析这些代码,你可以更深入地理解如何在实际项目中应用IOCP来实现单线程监听多个端口的功能。注意,实现时还需要考虑线程安全、内存管理、异常处理等问题,以确保代码的稳定性和可靠性。此外,由于这是一...

    Java开发环境Eclipse远程调试端口配置

    ### Java开发环境Eclipse远程调试端口配置 #### 运行环境配置 为了实现Java Eclipse远程调试功能,首先需要确保本地开发环境与远程服务器环境之间的兼容性和一致性。具体步骤如下: 1. **运行ncSysconfig命令**:...

    多线程 TCIIP 侦听器(VB.NET)

    在VB.NET编程环境中,创建一个多线程TCP监听器是一项重要的任务,特别是在处理大量并发连接时,多线程技术能够显著提升程序的性能和响应能力。这个“多线程TCPIP侦听器”项目可能涉及以下几个核心知识点: 1. **TCP...

    UDP.rar_UDP_UDP侦听_UDP发送_UDP接收_java接收端口

    `UDPServerDriver`可能是主驱动类,负责启动和管理UDP服务器,而`UDPServerLinkspool`可能是一个链接池类,用于管理和复用UDP连接,提高服务器的性能。 综上所述,通过Java的DatagramSocket类,我们可以实现UDP的...

    java 扫描TCP端口

    此外,`java.net.ServerSocket`类也可以用来侦听特定端口,但这个通常用于创建服务器端应用,而不是扫描端口。对于端口扫描,`Socket`类是更合适的工具。 注意,频繁地扫描大量端口可能会被视为网络攻击,因此在...

    计算机软件-商业源码-多线程 TCIIP 侦听器(VB.NET).zip

    【标题】中的“计算机软件-商业源码-多线程 TCIIP 侦听器(VB.NET)”表明这是一个使用VB.NET编程语言开发的商业级软件源码,专注于多线程TCP/IP监听。TCP/IP是一种网络通信协议,用于在互联网上进行双向、可靠的数据...

    这是一个端口侦听工具软件代码,功能很强,请谨慎使用(11kb)

    端口侦听工具是一种用于监控网络通信的软件,它能够帮助用户查看哪些程序正在通过特定端口进行数据传输。在IT行业中,这类工具通常被网络安全专家、系统管理员以及开发者用来诊断网络问题、检测潜在的入侵行为或者...

    ASP.NET Development Server未能开始侦听端口

    ASP.NET Development Server未能开始侦听端口

    VB.NET源码,多线程侦听器.rar

    在这个“VB.NET源码,多线程侦听器.rar”压缩包中,我们主要关注的是如何使用VB.NET实现多线程监听器。这个项目可能是一个通信应用的基础部分,允许不同设备或程序之间交换数据。 首先,我们要理解多线程的概念。在...

    web-client-server:简单 HTTP Web 客户端和多线程 Web 服务器的 Java 实现

    简单 HTTP Web 客户端和多线程 Web 服务器的 Java 实现。 ###开发工具: 编程语言: Java (jdk 1.7) IDE: Eclipse Juno (4.2) 外部包:除了 java.io 和 java.net 等默认 Java 包之外,不需要任何外部包。 操作...

    C#多线程与Socket聊天室的实现

    2. **Socket**:在服务器端,我们需要创建一个监听Socket,调用其Bind方法绑定到特定的IP地址和端口,然后使用Listen方法开始侦听连接请求。当有客户端连接时,Accept方法会返回一个新的Socket对象,用于与该客户端...

    socketproxy:一个简单的 Java 多线程 Socket 代理服务器。 它侦听传入的连接并将任何通信转发到服务器,同时记录整个对话

    套接字代理一个简单的 Java 多线程 Socket 代理服务器。 它侦听传入的连接并将任何通信转发到服务器,同时记录整个对话。套接字代理服务器这是库的主类。 它可以由第三方实例化,并提供本地端口和服务器的远程主机/...

    多串口自动侦听程序

    为了应对这一挑战,出现了多串口自动侦听程序,它允许用户同时管理和监控多个串口的数据流,极大地提高了工作效率和系统的可扩展性。 多串口技术正是为了解决单个串口通信局限性的问题而出现的。在一个多串口系统中...

Global site tag (gtag.js) - Google Analytics