本文实例为大家分享了Java测试网络连通性的方法,供大家参考,具体内容如下
第一种方式:利用java运行时:
Java代码
/**
* test network
* @param ip
*/
private void getNetworkState(String ip) {
Runtime runtime = Runtime.getRuntime();
try {
log.info("=================正在测试网络连通性ip:"+ip);
Process process = runtime.exec("ping " +ip);
InputStream iStream = process.getInputStream();
InputStreamReader iSReader = new InputStreamReader(iStream,"UTF-8");
BufferedReader bReader = new BufferedReader(iSReader);
String line = null;
StringBuffer sb = new StringBuffer();
while ((line = bReader.readLine()) != null) {
sb.append(line);
}
iStream.close();
iSReader.close();
bReader.close();
String result = new String(sb.toString().getBytes("UTF-8"));
log.info("ping result:"+result);
if (!StringUtils.isBlank(result)) {
if (result.indexOf("TTL") > 0 || result.indexOf("ttl") > 0) {
log.info("网络正常,时间: " + TimeUtil.getCurDate("yyyy-mm-dd hh:mm:ss"));
} else {
log.info("网络断开,时间 :" + TimeUtil.getCurDate("yyyy-mm-dd hh:mm:ss"));
}
}
} catch (Exception e) {
log.error("网络异常:"+e.getMessage());
e.printStackTrace();
}
}
在windows平台上,上面代码没有为,ping ip 会结束,而在linux环境中ping命令,ping不通时,
会卡住,ping通,会不定的输出信息,考虑用另一种方式socket。
第二种方式socket:Java代码
package com.util.network;
import java.io.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.NetworkInterface;
import java.net.Socket;
import java.net.SocketAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Enumeration;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* 测试网络连通性
*
* @author donald
*
*/
public class NetworkHelper {
private static Logger log = LoggerFactory.getLogger(NetworkHelper.class);
private static NetworkHelper instance = null;
public static synchronized NetworkHelper getInstance(){ <