`
hwpok
  • 浏览: 250858 次
  • 性别: 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);
    }

}


分享到:
评论

相关推荐

    用java实现ping的几种方式

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

    java实现的模拟ping功能

    1. **网络监控**:可用于定期检查服务器或网络设备的连通性状态。 2. **故障排查**:在网络出现故障时,可以通过批量Ping操作快速定位问题所在。 3. **自动化测试**:集成到自动化测试框架中,以确保网络服务的可用...

    javaping.rar_JAVA ping_ping_ping(java)

    总之,"javaping.rar"中的Java实现提供了一种在Java程序中进行网络可达性检查的方法,虽然不直接使用ICMP,但通过模拟TCP/IP底层协议,实现了ping的功能。这有助于开发者在无需依赖外部命令行工具的情况下,进行网络...

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

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

    Ping_Java.rar_it_ping

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

    Java零基础 - ping命令.md

    而在Java编程环境中实现这一功能,不仅可以帮助开发者更好地了解网络状态,还能为应用程序增加网络监控的能力。本文档将详细介绍如何利用Java中的`ProcessBuilder`类来执行ping命令,并解析其输出结果,以此来判断...

    PINGtest_ping_

    标题"PINGtest_ping_"指的是一个用于测试网络连通性的工具,特别关注于使用"ping"命令来检查IP地址的可达性。"ping"是互联网控制报文协议(ICMP)的一部分,它允许网络设备发送“回显请求”到目标IP地址,然后接收...

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

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

    自动ping网页软件

    标题中的“自动ping网页软件”是指一种能够自动化执行ping命令的工具,主要用于检查网络连接的稳定性和速度。这种软件能够定期或连续不断地向指定的网页或IP地址发送ICMP(Internet Control Message Protocol)请求...

    android实时网络质量检测

    3. **NetworkInfo API**:通过`ConnectivityManager`获取网络状态信息,如网络类型、是否连接等。 4. **Traceroute**:虽然在Android中不常用,但`traceroute`可以追踪数据包在网络中的路由,提供更详细的网络路径...

    ping官网源码

    `ping`是Internet控制报文协议(ICMP)的一部分,用于测试网络连接的连通性,通常通过发送ICMP回显请求到目标主机并接收回显应答来检查网络的可达性。 在Java中实现`ping`功能,我们需要理解以下几个核心知识点: ...

    ping.rar 一个特别的PING程序

    PING程序是网络诊断工具,用于检查网络连接是否畅通,通过发送ICMP(Internet Control Message Protocol)回显请求到目标主机并接收其回显应答来判断网络连通性。这个特别的PING程序增加了额外的功能,如声音报警、...

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

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

    android studio写的ping程序app

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

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

    3. **检查命令状态**:如果命令成功执行且网络通畅,则返回值为0;否则返回非零值。 4. **处理异常情况**: - 如果在执行命令时发生`IOException`,则表示执行过程中出现了错误,如权限不足等。 - 如果在等待命令...

    网络连接状态检测.zip

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

    android studio ping

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

    百度批量PING工具.zip

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

    android ping多个Ip源码

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

Global site tag (gtag.js) - Google Analytics