`
wataxi
  • 浏览: 207026 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

(转)JAVA 检测网络是否为连通状态 ping

    博客分类:
  • java
阅读更多
要用java检测网络资源是否可用,我们可以采用以下两种方法:
一种方法是调用ping命令,
如:
Process process= Runtime.getRuntime().exec("ping 192.168.0.5");
InputStreamReader return = new InputStreamReader(process.getInputStream());
LineNumberReader returnData = new LineNumberReader (return);

String line="";
while((line=returnData.readLine())!=null){
System.out.println(line);
}
通用对返回数据进行分析,来探测网络资源的可用性;
这种方法有一个缺点:就是许多网络资源是不允许被ping的,从而针对这类资源无法探测。

(2008-07-28记)



Dos中的ping 命令能很方便的检测网络是否为连通状态.但是在java中,一直没有找到好的方法检来测网络是否为连通状态.无奈之余,想出了如下方法:

package com.roadway.edserver.util;

import java.awt.Toolkit;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
/** *//**
* @Description:本类开启一个线程检测网络是否连通
* @Author : 惠万鹏
* @Time :2008-1-10
*/
public class NetworkManagement implements Runnable {
    private int htmlCodeSize;
    private int sleepMillisecond;
    private int sleepMillisecondWhenNetWorkUnLinked;
    private boolean isSpontaneousNotice;
    private static boolean networkIsLinked;
    private Thread thread = new Thread(this);
    private Toolkit toolkit;
    private String[] urls;

    public NetworkManagement() {
        this.urls = new String[]{"http://www.baidu.com", "http://www.google.cn"};
        this.htmlCodeSize = 50;
        this.sleepMillisecond = 5000;
        this.sleepMillisecondWhenNetWorkUnLinked = 10000;
        this.toolkit = Toolkit.getDefaultToolkit();
        thread.start();
    }
    public void setURLs(String[] urls) {
        if (urls != null && urls.length > 0) {
            this.urls = urls;
        }
    }
    public void setHtmlCodeSize(int htmlCodeSize) {
        if (htmlCodeSize > 0) {
            this.htmlCodeSize = htmlCodeSize;
        }
    }
    public void isSpontaneousNotice(boolean isSpontaneousNotice) {
        this.isSpontaneousNotice = isSpontaneousNotice;
    }
    public void setSleepMillisecont(int sleepMillisecont) {
        if (sleepMillisecont > 100) {
            this.sleepMillisecond = sleepMillisecont;
        }
    }
    public void setSleepMillisecondWhenNetWorkUnLinked(int sleepMillisecont) {
        if (sleepMillisecont > 100) {
            this.sleepMillisecondWhenNetWorkUnLinked = sleepMillisecont;
        }
    }
    public static boolean IsNetWordLinking() {
        return NetworkManagement.networkIsLinked;
    }

    public void run() {
        while (true) {
            try {
                this.isNetWorkLinked();
                if (!NetworkManagement.networkIsLinked) {
                    this.isPrintMessage(this.isSpontaneousNotice);
                    Thread.sleep(this.sleepMillisecondWhenNetWorkUnLinked);
                }
                System.out.println(NetworkManagement.IsNetWordLinking());
                Thread.sleep(this.sleepMillisecond);
            } catch (Exception e) {
            }
        }
    }

    private boolean canGetHtmlCode(String httpUrl) {
        String htmlCode = "";
        try {
            InputStream in;
            URL url = new java.net.URL(httpUrl);
            HttpURLConnection connection = (HttpURLConnection) url
                    .openConnection();
            connection = (HttpURLConnection) url.openConnection();
            connection.setRequestProperty("User-Agent", "Mozilla/4.0");
            connection.connect();
            in = connection.getInputStream();
            byte[] buffer = new byte[this.htmlCodeSize];
            in.read(buffer);
            htmlCode = new String(buffer);
        } catch (Exception e) {
        }
        if (htmlCode == null || htmlCode.equals("")) {
            return false;
        }
        return true;
    }

    private void isNetWorkLinked() {
        boolean tempIsNetWorkLinked = false;
        for (int urlsCount = 0; urlsCount < this.urls.length; urlsCount++) {
            if (this.canGetHtmlCode(this.urls[urlsCount])) {
                tempIsNetWorkLinked = true;
                break;
            }
        }
        NetworkManagement.networkIsLinked = tempIsNetWorkLinked;
    }
    private void isPrintMessage(boolean isPrint) {
        if (isPrint) {
            toolkit.beep();
            StringBuffer message = new StringBuffer();
            message.append("------------->");
            message.append("网络中断, ");
            message.append(this.sleepMillisecondWhenNetWorkUnLinked);
            message.append(" 毫秒后再次检测!<-------------");
            System.out.println(message.toString());
        }

    }
    public static void main(String[] args) {
        NetworkManagement n = new NetworkManagement();
        n.isSpontaneousNotice(true);
    }
}



转自:http://hwpok.iteye.com/blog/615992
分享到:
评论

相关推荐

    用java实现ping的几种方式

    在日常网络管理和软件开发中,经常需要检查网络连通性。`ping`命令作为一种简单而有效的工具被广泛应用于这一领域。本文将介绍几种使用Java来实现`ping`功能的方法。 #### 方法一:纯Java实现ICMP的ping命令 在...

    javaping.rar_JAVA ping_ping_ping(java)

    这个"javaping.rar"压缩包包含了一个Java实现的ping功能,使得开发者能够在Java应用程序中集成网络检测的能力。下面将详细探讨Java如何实现ping操作以及其背后的原理。 首先,我们要理解原始的ping命令是基于ICMP...

    Ping_Java.rar_it_ping

    - **Socket方式**:另一种方法是通过创建Socket并尝试连接到目标IP,虽然这不是真正的ICMP Ping,但能检测端口是否开放,从而间接判断网络连通性。 4. **代码示例**: - 使用JICMP库,你可以创建一个Ping类,通过...

    android实时网络质量检测

    在Android平台上进行实时网络质量检测是一项重要的任务,它有助于开发者评估应用性能,优化网络请求,以及为用户提供流畅的网络体验。通常,我们可以利用系统内置的`ping`命令来实现这一功能。`ping`是一个用于测试...

    网络连接状态检测.zip

    【标题】"网络连接状态检测.zip"所涉及的知识点主要集中在如何在Android平台上进行网络连接状态的检测。网络连接状态的检测是移动应用开发中的重要环节,它可以帮助开发者确保应用程序在需要时能够顺利地访问网络...

    PINGtest_ping_

    反之,如果连续几次没有收到响应,工具可能会判断为网络中断。 此外,记录日志这一功能非常关键,因为它允许用户跟踪和分析过去的网络性能。日志文件会包含每次ping测试的结果,包括成功与否、往返时间(RTT)等...

    计算机网络课程设计报告-PING程序设计与实现.doc

    在计算机网络中,PING程序是一个非常基础且重要的工具,它主要用于检测网络的连通性。通过发送ICMP(Internet Control Message Protocol,互联网控制消息协议)回送请求报文到目标主机,然后等待接收相应的回送回答...

    自动ping网页软件

    这种软件能够定期或连续不断地向指定的网页或IP地址发送ICMP(Internet Control Message Protocol)请求,然后记录并分析响应时间,帮助用户了解目标服务器的在线状态和网络连通性。 在描述中提到的“自动ping IP...

    在android 中调用ping命令 来获取网络通断

    1. **`ping`命令**:是一种用于测试两个主机之间连通性的网络工具。它通过向目标主机发送ICMP(Internet Control Message Protocol)回显请求(Echo Request),然后等待接收回显应答(Echo Reply)来工作。 2. **...

    android studio写的ping程序app

    在Android系统中,ping命令用于检查设备与网络上其他主机之间的连通性,通过发送ICMP(Internet Control Message Protocol)回显请求来测试网络连接的延迟和丢包情况。 描述中提到“直接可以用”,意味着这个app...

    java检查服务器的连通两种方法代码分享

    在 Java 中,检查服务器连通是一个非常重要的问题,因为它可以帮助我们检测服务器的状态,确保服务器的可用性和稳定性。今天,我们将分享两种使用 Java 检查服务器连通的方法代码。 方法一:使用 InetAddress 的 is...

    tcpping 一个很好用的网络判断工具

    1. **网络连通性检测**:tcpping可以用来检查服务器是否在线,即便服务器禁用了ICMP回应,也能通过TCP连接来判断。 2. **延迟测量**:与ping类似,tcpping可以测量从发送连接请求到接收到响应的时间,从而估算出...

    基于JAVA技术在安防设施检测中的应用.pdf

    但是JAVA并没有提供类似Ping命令来测试网络连通性的方法,而是使用Java网络编程的一些类库java.net.InetAddress提供的isReachable()方法来模拟Ping命令,探测安防网络设备是否可达来判断此安防设备是否处于在线状态...

    android studio ping

    这个功能在很多场景下都非常关键,例如检测网络延迟、检查网络连接是否稳定或者验证服务器是否在线。下面我们将深入探讨如何在Android Studio中实现ping功能,以及相关的重要知识点。 首先,Android系统本身并不...

    百度批量PING工具.zip

    标题中的“百度批量PING工具”指的是一个专门用于批量检测网络连通性的实用程序,它集成了百度的域名或IP地址,帮助用户快速检查与百度服务器的连接状态。在IT行业中,PING是一个网络诊断命令,通过发送ICMP...

    android ping多个Ip源码

    在Android平台上,`ping`命令通常用于测试网络连通性,检查设备能否与特定IP地址进行通信。在Android应用开发中,我们有时需要实现类似的功能,例如批量ping多个IP地址来检测网络状况或者验证服务器可用性。这个...

    jsp.zip_5RS9_JS前端ping源码_feedkxh_jsp ping_前端用jsp

    标题中的"jsp.zip_5RS9_JS前端ping源码_feedkxh_jsp ping_前端用jsp"揭示了这是一个关于JavaScript(JS)前端实现的网络Ping功能,利用JSP(JavaServer Pages)技术进行辅助。这个项目可能包含了前端的HTML页面...

    实时网络状态监测

    2. **网络连接检测**:常用的方法有发送Ping请求,通过发送ICMP回显请求到目标设备并接收响应来判断网络连通性。此外,TCP三次握手也是一种有效的方式,如果能成功建立TCP连接,说明网络是可达的。 3. **事件监听**...

    即时ping的服务

    即时ping服务是一种网络诊断工具,它允许用户快速检查与远程...无论是作为独立的服务,还是集成到其他系统中,都为网络故障排查和性能监控提供了便利。在开发这样的服务时,要考虑到安全、性能和用户体验等多个方面。

Global site tag (gtag.js) - Google Analytics