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");
}
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。