java如何测试网络连通性
本文实例为大家分享了Java测试网络连通性的方法,供大家参考,具体内容如下
第一种方式:利用java运行时:
Java代码
/** *testnetwork *@paramip */ privatevoidgetNetworkState(Stringip){ Runtimeruntime=Runtime.getRuntime(); try{ log.info("=================正在测试网络连通性ip:"+ip); Processprocess=runtime.exec("ping"+ip); InputStreamiStream=process.getInputStream(); InputStreamReaderiSReader=newInputStreamReader(iStream,"UTF-8"); BufferedReaderbReader=newBufferedReader(iSReader); Stringline=null; StringBuffersb=newStringBuffer(); while((line=bReader.readLine())!=null){ sb.append(line); } iStream.close(); iSReader.close(); bReader.close(); Stringresult=newString(sb.toString().getBytes("UTF-8")); log.info("pingresult:"+result); if(!StringUtils.isBlank(result)){ if(result.indexOf("TTL")>0||result.indexOf("ttl")>0){ log.info("网络正常,时间:"+TimeUtil.getCurDate("yyyy-mm-ddhh:mm:ss")); }else{ log.info("网络断开,时间:"+TimeUtil.getCurDate("yyyy-mm-ddhh:mm:ss")); } } }catch(Exceptione){ log.error("网络异常:"+e.getMessage()); e.printStackTrace(); } }
在windows平台上,上面代码没有为,pingip会结束,而在linux环境中ping命令,ping不通时,
会卡住,ping通,会不定的输出信息,考虑用另一种方式socket。
第二种方式socket:
Java代码
packagecom.util.network; importjava.io.IOException; importjava.net.InetAddress; importjava.net.InetSocketAddress; importjava.net.NetworkInterface; importjava.net.Socket; importjava.net.SocketAddress; importjava.net.SocketException; importjava.net.UnknownHostException; importjava.util.Enumeration; importorg.apache.commons.lang.StringUtils; importorg.slf4j.Logger; importorg.slf4j.LoggerFactory; /** *测试网络连通性 * *@authordonald * */ publicclassNetworkHelper{ privatestaticLoggerlog=LoggerFactory.getLogger(NetworkHelper.class); privatestaticNetworkHelperinstance=null; publicstaticsynchronizedNetworkHelpergetInstance(){ if(instance==null){ instance=newNetworkHelper(); } returninstance; } /** *测试本地能否pingip * *@paramip *@return */ publicbooleanisReachIp(Stringip){ booleanisReach=false; try{ InetAddressaddress=InetAddress.getByName(ip);//pingthisIP if(addressinstanceofjava.net.Inet4Address){ log.info(ip+"isipv4address"); }elseif(addressinstanceofjava.net.Inet6Address){ log.info(ip+"isipv6address"); }else{ log.info(ip+"isunrecongized"); } if(address.isReachable(5000)){ isReach=true; log.info("SUCCESS-ping"+ip +"withnointerfacespecified"); }else{ isReach=false; log.info("FAILURE-ping"+ip +"withnointerfacespecified"); } }catch(Exceptione){ log.error("erroroccurs:"+e.getMessage()); } returnisReach; } /** *测试本地所有的网卡地址都能ping通ip * *@paramip *@return */ publicbooleanisReachNetworkInterfaces(Stringip){ booleanisReach=false; try{ InetAddressaddress=InetAddress.getByName(ip);//pingthisIP if(addressinstanceofjava.net.Inet4Address){ log.info(ip+"isipv4address"); }elseif(addressinstanceofjava.net.Inet6Address){ log.info(ip+"isipv6address"); }else{ log.info(ip+"isunrecongized"); } if(address.isReachable(5000)){ isReach=true; log.info("SUCCESS-ping"+ip +"withnointerfacespecified"); }else{ isReach=false; log.info("FAILURE-ping"+ip +"withnointerfacespecified"); } if(isReach){ log.info("-------Tryingdifferentinterfaces--------"); Enumeration<NetworkInterface>netInterfaces=NetworkInterface .getNetworkInterfaces(); while(netInterfaces.hasMoreElements()){ NetworkInterfaceni=netInterfaces.nextElement(); log.info("Checkinginterface,DisplayName:" +ni.getDisplayName()+",Name:"+ni.getName()); if(address.isReachable(ni,0,5000)){ isReach=true; log.info("SUCCESS-ping"+ip); }else{ isReach=false; log.info("FAILURE-ping"+ip); } Enumeration<InetAddress>ips=ni.getInetAddresses(); while(ips.hasMoreElements()){ log.info("IP:"+ips.nextElement().getHostAddress()); } log.info("-----------------checknowNetworkInterfaceisdone--------------------------"); } } }catch(Exceptione){ log.error("erroroccurs:"+e.getMessage()); } returnisReach; } /** *获取能与远程主机指定端口建立连接的本机ip地址 *@paramremoteAddr *@paramport *@return */ publicStringgetReachableIP(InetAddressremoteAddr,intport){ StringretIP=null; Enumeration<NetworkInterface>netInterfaces; try{ netInterfaces=NetworkInterface.getNetworkInterfaces(); while(netInterfaces.hasMoreElements()){ NetworkInterfaceni=netInterfaces.nextElement(); Enumeration<InetAddress>localAddrs=ni.getInetAddresses(); while(localAddrs.hasMoreElements()){ InetAddresslocalAddr=localAddrs.nextElement(); if(isReachable(localAddr,remoteAddr,port,5000)){ retIP=localAddr.getHostAddress(); break; } } } }catch(SocketExceptione){ log.error("Erroroccurredwhilelistingallthelocalnetworkaddresses:" +e.getMessage()); } if(retIP==null){ log.info("NULLreachablelocalIPisfound!"); }else{ log.info("ReachablelocalIPisfound,itis"+retIP); } returnretIP; } /** *获取能与远程主机指定端口建立连接的本机ip地址 *@paramremoteIp *@paramport *@return */ publicStringgetReachableIP(StringremoteIp,intport){ StringretIP=null; InetAddressremoteAddr=null; Enumeration<NetworkInterface>netInterfaces; try{ remoteAddr=InetAddress.getByName(remoteIp); netInterfaces=NetworkInterface.getNetworkInterfaces(); while(netInterfaces.hasMoreElements()){ NetworkInterfaceni=netInterfaces.nextElement(); Enumeration<InetAddress>localAddrs=ni.getInetAddresses(); while(localAddrs.hasMoreElements()){ InetAddresslocalAddr=localAddrs.nextElement(); if(isReachable(localAddr,remoteAddr,port,5000)){ retIP=localAddr.getHostAddress(); break; } } } }catch(UnknownHostExceptione){ log.error("Erroroccurredwhilelistingallthelocalnetworkaddresses:"+e.getMessage()); }catch(SocketExceptione){ log.error("Erroroccurredwhilelistingallthelocalnetworkaddresses:"+e.getMessage()); } if(retIP==null){ log.info("NULLreachablelocalIPisfound!"); }else{ log.info("ReachablelocalIPisfound,itis"+retIP); } returnretIP; } /** *测试localInetAddr能否与远程的主机指定端口建立连接相连 * *@paramlocalInetAddr *@paramremoteInetAddr *@paramport *@paramtimeout *@return */ publicbooleanisReachable(InetAddresslocalInetAddr, InetAddressremoteInetAddr,intport,inttimeout){ booleanisReachable=false; Socketsocket=null; try{ socket=newSocket(); //端口号设置为0表示在本地挑选一个可用端口进行连接 SocketAddresslocalSocketAddr=newInetSocketAddress( localInetAddr,0); socket.bind(localSocketAddr); InetSocketAddressendpointSocketAddr=newInetSocketAddress( remoteInetAddr,port); socket.connect(endpointSocketAddr,timeout); log.info("SUCCESS-connectionestablished!Local:" +localInetAddr.getHostAddress()+"remote:" +remoteInetAddr.getHostAddress()+"port"+port); isReachable=true; }catch(IOExceptione){ log.error("FAILRE-CANnotconnect!Local:" +localInetAddr.getHostAddress()+"remote:" +remoteInetAddr.getHostAddress()+"port"+port); }finally{ if(socket!=null){ try{ socket.close(); }catch(IOExceptione){ log.error("Erroroccurredwhileclosingsocket:" +e.getMessage()); } } } returnisReachable; } /** *测试localIp能否与远程的主机指定端口建立连接相连 * *@paramlocalIp *@paramremoteIp *@paramport *@paramtimeout *@return */ publicbooleanisReachable(StringlocalIp,StringremoteIp, intport,inttimeout){ booleanisReachable=false; Socketsocket=null; InetAddresslocalInetAddr=null; InetAddressremoteInetAddr=null; try{ localInetAddr=InetAddress.getByName(localIp); remoteInetAddr=InetAddress.getByName(remoteIp); socket=newSocket(); //端口号设置为0表示在本地挑选一个可用端口进行连接 SocketAddresslocalSocketAddr=newInetSocketAddress( localInetAddr,0); socket.bind(localSocketAddr); InetSocketAddressendpointSocketAddr=newInetSocketAddress( remoteInetAddr,port); socket.connect(endpointSocketAddr,timeout); log.info("SUCCESS-connectionestablished!Local:" +localInetAddr.getHostAddress()+"remote:" +remoteInetAddr.getHostAddress()+"port"+port); isReachable=true; }catch(IOExceptione){ log.error("FAILRE-CANnotconnect!Local:" +localInetAddr.getHostAddress()+"remote:" +remoteInetAddr.getHostAddress()+"port"+port); }finally{ if(socket!=null){ try{ socket.close(); }catch(IOExceptione){ log.error("Erroroccurredwhileclosingsocket:" +e.getMessage()); } } } returnisReachable; } publicstaticvoidmain(String[]args){ if(NetworkHelper.getInstance().isReachIp("192.168.126.128")){ log.info("=======本机可以ping通ip:"+"192.168.126.128"); } else{ log.info("=======本机ping不通ip:"+"192.168.126.128"); } if(NetworkHelper.getInstance().isReachNetworkInterfaces("192.168.126.128")){ log.info("=======本机所有网卡可以ping通ip:"+"192.168.126.128"); } else{ log.info("=======本机所有网卡ping不通ip:"+"192.168.126.128"); } StringlocalIp=NetworkHelper.getInstance().getReachableIP("192.168.126.128",8081); if(!StringUtils.isBlank(localIp)){ log.info("=======本机可以与ip:"+"192.168.126.128"+",port:"+8081+"建立连接的IP:"+localIp); } else{ log.info("=======本机不能与ip:"+"192.168.126.128"+",port:"+8081+"建立连接的IP"); } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。