要用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中,一直没有找到好的方法检来测网络是否为连通状态.无奈之余,想出了如下方法:
packagecom.roadway.edserver.util;
importjava.awt.Toolkit;
importjava.io.InputStream;
importjava.net.HttpURLConnection;
importjava.net.URL;
/** *//** * @Description:本类开启一个线程检测网络是否连通
* @Author : 惠万鹏
* @Time :2008-1-10
*/
publicclassNetworkManagementimplementsRunnable{
privateinthtmlCodeSize;
privateintsleepMillisecond;
privateintsleepMillisecondWhenNetWorkUnLinked;
privatebooleanisSpontaneousNotice;
privatestaticbooleannetworkIsLinked;
privateThread thread=newThread(this);
privateToolkit toolkit;
privateString[] urls;
publicNetworkManagement(){
this.urls=newString[]{"http://www.baidu.com","http://www.google.cn"};
this.htmlCodeSize=50;
this.sleepMillisecond=5000;
this.sleepMillisecondWhenNetWorkUnLinked=10000;
this.toolkit=Toolkit.getDefaultToolkit();
thread.start();
}
publicvoidsetURLs(String[] urls){
if(urls!=null&&urls.length>0){
this.urls=urls;
} }
publicvoidsetHtmlCodeSize(inthtmlCodeSize){
if(htmlCodeSize>0){
this.htmlCodeSize=htmlCodeSize;
} }
publicvoidisSpontaneousNotice(booleanisSpontaneousNotice){
this.isSpontaneousNotice=isSpontaneousNotice;
}
publicvoidsetSleepMillisecont(intsleepMillisecont){
if(sleepMillisecont>100){
this.sleepMillisecond=sleepMillisecont;
} }
publicvoidsetSleepMillisecondWhenNetWorkUnLinked(intsleepMillisecont){
if(sleepMillisecont>100){
this.sleepMillisecondWhenNetWorkUnLinked=sleepMillisecont;
} }
publicstaticbooleanIsNetWordLinking(){
returnNetworkManagement.networkIsLinked;
}
publicvoidrun(){
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){
} } }
privatebooleancanGetHtmlCode(String httpUrl){
String htmlCode="";
try{
InputStream in;
URL url=newjava.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=newbyte[this.htmlCodeSize];
in.read(buffer);
htmlCode=newString(buffer);
}catch(Exception e){
}
if(htmlCode==null||htmlCode.equals("")){
returnfalse;
}returntrue;
}
privatevoidisNetWorkLinked(){
booleantempIsNetWorkLinked=false;
for(inturlsCount=0; urlsCount{
if(this.canGetHtmlCode(this.urls[urlsCount])){
tempIsNetWorkLinked=true;
break;
} } NetworkManagement.networkIsLinked=tempIsNetWorkLinked;
}
privatevoidisPrintMessage(booleanisPrint){
if(isPrint){
toolkit.beep();
StringBuffer message=newStringBuffer();
message.append("------------->");
message.append("网络中断,");
message.append(this.sleepMillisecondWhenNetWorkUnLinked);
message.append("毫秒后再次检测!
System.out.println(message.toString());
}
}
publicstaticvoidmain(String[] args){
NetworkManagement n=newNetworkManagement();
n.isSpontaneousNotice(true);
}}