import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.regex.Pattern;
import org.apache.commons.io.IOUtils;
/**
*
* <ul>
* Windows 的,不支持其他系统
* <li>经过测试,可连通情况下,返回时间60MS
* <li>不可连通情况下,返回时间为:500MS
* </ul>
*/
public class Ping {
/** ping命令,如果不是windows系统,修改*/
public static String pingCmd = "ping -n 1 -l 10 -w 500 ";
/** ping结果字符编码,默认GBK*/
public static String pingRsEncoding = "GBK";
/** ping结果匹配行数,默认3*/
public static int checkLine = 3;
/** ping结果,匹配的正则表达式 (字节|bytes)=10*/
public static Pattern pattern = Pattern.compile("(字节|bytes)=10");
//public static int times = ScConfig.getInt("ping.times", 5);
public static int times = 10;
/**
* ping the server
*
* @param server
* String
* @param timeout
* int
* @return boolean
* @throws IOException
*/
public static boolean pingServer(String server) {
BufferedReader in = null;
//取得当前JVM的运行时环境
Runtime r = Runtime.getRuntime();
boolean pingResult = false;
String pingCommand = pingCmd + server;
int i = 0;
while(i < times){
i++;
pingResult = pingDo(in, r, pingResult, pingCommand);
if(pingResult){
break;
}
}
return pingResult;
}
/**
* @param in
* @param r
* @param pingResult
* @param pingCommand
* @return
*/
private static boolean pingDo(BufferedReader in, Runtime r,
boolean pingResult, String pingCommand) {
Process p = null;
try {
p = r.exec(pingCommand);
if (p == null) {
return false;
}
in = new BufferedReader(new InputStreamReader(p.getInputStream(),pingRsEncoding));
String line = null;
while ((line = in.readLine()) != null) {
pingResult = pattern.matcher(line).find();
if(pingResult){
break;
}
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
try {
p.waitFor();
IOUtils.closeQuietly(in);
p.destroy();
} catch (InterruptedException e) {
e.printStackTrace();
}
p = null;
}
return pingResult;
}
public static void main(String[] args){
String str = "192.1.1.11";
System.out.println(pingServer(str));
}
}
打印结果:
true