基于Java判断网络是否正常代码实例
判断网络是否正常使用
代码如下
/** *判断网络是否正常 *@return */ publicstaticbooleanisConnect(StringipPath){ //定义其返回的状态,默认为false,网络不正常 booleanconnect=false; /** *用Runtime.getRuntime().exec()来调用系统外部的某个程序, *他会生成一个新的进程去运行调用的程序。 *此方法返回一个java.lang.Process对象, *该对象可以得到之前开启的进程的运行结果, *还可以操作进程的输入输出流。 */ Runtimeruntime=Runtime.getRuntime(); Processprocess; try{ process=runtime.exec("ping"+ipPath); InputStreamis=process.getInputStream(); InputStreamReaderisr=newInputStreamReader(is,"GBK"); BufferedReaderbr=newBufferedReader(isr); Stringline=null; StringBuffersb=newStringBuffer(); while((line=br.readLine())!=null){ sb.append(line); } System.out.println("返回值为:"+sb); is.close(); isr.close(); br.close(); if(null!=sb&&!sb.toString().equals("")){ StringlogString=""; if(sb.toString().indexOf("TTL")>0){ //网络畅通 connect=true; }else{ //网络不畅通 connect=false; } } }catch(IOExceptione){ e.printStackTrace(); } returnconnect; }
TTL:生存时间
指定数据报被路由器丢弃之前允许通过的网段数量。
TTL是由发送主机设置的,以防止数据包不断在IP互联网络上永不终止地循环。转发IP数据包时,要求路由器至少将TTL减小1。
使用PING时涉及到的ICMP报文类型
一个为ICMP请求回显(ICMPEchoRequest)
一个为ICMP回显应答(ICMPEchoReply)
TTL字段值可以帮助我们识别操作系统类型
测试
publicstaticvoidmain(String[]args){ System.out.println(HttpUtil.isConnect("220.181.111.188")); }
控制台显示
返回值为:正在Ping220.181.111.188
具有32字节的数据:
来自220.181.111.188的回复:字节=32时间=23msTTL=53
来自220.181.111.188的回复:字节=32时间=23msTTL=53
来自220.181.111.188的回复:字节=32时间=24msTTL=53
来自220.181.111.188的回复:字节=32时间=23ms
TTL=53220.181.111.188的Ping统计信息:
数据包:已发送=4,已接收=4,丢失=0(0%丢失),
往返行程的估计时间(以毫秒为单位):
最短=23ms,最长=24ms,平均=23mstrue
Processfinishedwithexitcode0
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。