如何在Java项目中判断网络是否正常
如何在Java项目中判断网络是否正常?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
站在用户的角度思考问题,与客户深入沟通,找到惠州网站设计与惠州网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:网站设计、成都网站制作、企业官网、英文网站、手机端网站、网站推广、国际域名空间、网站空间、企业邮箱。业务覆盖惠州地区。
代码如下
/** * 判断网络是否正常 * @return */ public static boolean isConnect(String ipPath){ //定义其返回的状态,默认为false,网络不正常 boolean connect = false; /** * 用Runtime.getRuntime().exec()来调用系统外部的某个程序, * 他会生成一个新的进程去运行调用的程序。 * 此方法返回一个java.lang.Process对象, * 该对象可以得到之前开启的进程的运行结果, * 还可以操作进程的输入输出流。 */ Runtime runtime = Runtime.getRuntime(); Process process; try { process = runtime.exec("ping " + ipPath); InputStream is = process.getInputStream(); InputStreamReader isr = new InputStreamReader(is,"GBK"); BufferedReader br = new BufferedReader(isr); String line = null; StringBuffer sb = new StringBuffer(); while ((line = br.readLine()) != null) { sb.append(line); } System.out.println("返回值为:"+sb); is.close(); isr.close(); br.close(); if (null != sb && !sb.toString().equals("")) { String logString = ""; if (sb.toString().indexOf("TTL") > 0) { // 网络畅通 connect = true; } else { // 网络不畅通 connect = false; } } } catch (IOException e) { e.printStackTrace(); } return connect; }
TTL:生存时间
指定数据报被路由器丢弃之前允许通过的网段数量。
TTL 是由发送主机设置的,以防止数据包不断在 IP 互联网络上永不终止地循环。转发 IP 数据包时,要求路由器至少将 TTL 减小 1。
使用PING时涉及到的 ICMP 报文类型
一个为ICMP请求回显(ICMP Echo Request)
一个为ICMP回显应答(ICMP Echo Reply)
TTL 字段值可以帮助我们识别操作系统类型
测试
public static void main(String[] args) { System.out.println(HttpUtil.isConnect("220.181.111.188")); }
控制台显示
返回值为:正在 Ping 220.181.111.188
具有 32 字节的数据:
来自 220.181.111.188 的回复: 字节=32 时间=23ms TTL=53
来自 220.181.111.188 的回复: 字节=32 时间=23ms TTL=53
来自 220.181.111.188 的回复: 字节=32 时间=24ms TTL=53
来自 220.181.111.188 的回复: 字节=32 时间=23ms
TTL=53220.181.111.188 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 23ms,最长 = 24ms,平均 = 23mstrue
Process finished with exit code 0
看完上述内容,你们掌握如何在Java项目中判断网络是否正常的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!
新闻标题:如何在Java项目中判断网络是否正常
文章起源:http://azwzsj.com/article/ggieje.html