项目需求,在断网重连的情况下,点击网页请求直接跳转登录页,但可能有写公司的网站访问时需要vpn的,就是断网后,即便你做了跳转登陆页,也看不出来有啥变化,但需求在这里。之前我也考虑了获取ipconfig中的IPV4、IPV6的域名,后来筛选了一下,感觉不太行,好像java这边不好做。所以不如直接取ping一个网站,通就通,不通就不通。下面的代码可以这样写,方法拿去改一下,添加一个过滤器,在每次请求的时候先执行过滤器,然后执行这个方法,返回true和false,以此来判断吧。不说是原创,借鉴了几个老哥的学习了一下,顺便说一下,各位老哥不要吐槽,我不喜欢代码里有魔法值,所以在上面定义了一下,各位老哥请见谅!!!
public class TestNetwork {
public static final String PING = "ping ";
public static final String REQUEST_URL = "www.baidu.com";
public static final String GBK = "gbk";
public static final String TTL = "TTL";
public static final String NORMAL = "Network normal,The time is : ";
public static final String EXCEPTION = "Network exception,The time is : ";
public static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
public static boolean isNetWorkStatus() {
boolean flag = false;
String line = null;
StringBuffer sb = new StringBuffer();
try {
Process process = Runtime.getRuntime().exec(PING + REQUEST_URL);
BufferedReader buf = new BufferedReader( new InputStreamReader(
process.getInputStream(), Charset.forName(GBK)));
while ((line = buf.readLine()) != null) {
sb.append(line);
System.out.println(line);
}
buf.close();
if (null != sb && !sb.toString().equals("")) {
String runLog = "";
if (sb.toString().indexOf(TTL) > 0) {
//Network normal
flag = true;
runLog = NORMAL + getCurrentTime();
System.out.println(runLog);
} else {
//Network exception
flag =false;
runLog = EXCEPTION + getCurrentTime();
System.err.println(runLog);
}
}
} catch (Exception e) {
e.printStackTrace();
}finally {
}
return flag;
}
public static String getCurrentTime() {
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
String time = sdf.format(new Date());
return time;
}
public static void main(String[] args) {
System.out.println(isNetWorkStatus());
}
}