梦幻之旅

DEBUG - 天道酬勤

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  671 随笔 :: 6 文章 :: 256 评论 :: 0 Trackbacks

要用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);
    }

}


posted on 2007-12-07 19:27 HUIKK 阅读(5204) 评论(0)  编辑  收藏 所属分类: Java

只有注册用户登录后才能发表评论。


网站导航: