java检查服务器的连通两种方法代码分享
作者:dns007
首先要了解一下ping的内容。
概述
PING (Packet Internet Groper),因特网包探索器,用于测试网络连接量的程序。Ping发送一个ICMP(Internet Control Messages Protocol)即因特网信报控制协议;回声请求消息给目的地并报告是否收到所希望的ICMPecho (ICMP回声应答)。它是用来检查网络是否通畅或者网络连接速度的命令。作为一个生活在网络上的管理员或者黑客来说,ping命令是第一个必须掌握的DOS命令,它所利用的原理是这样的:利用网络上机器IP地址的唯一性,给目标IP地址发送一个数据包,再要求对方返回一个同样大小的数据包来确定两台网络机器是否连接相通,时延是多少。
ping指的是端对端连通,通常用来作为可用性的检查, 但是某些病毒木马会强行大量远程执行ping命令抢占你的网络资源,导致系统变慢,网速变慢。严禁ping入侵作为大多数防火墙的一个基本功能提供给用户进行选择。通常的情况下你如果不用作服务器或者进行网络测试,可以放心的选中它,保护你的电脑。
通常检查服务器连通 使用ping命令,java代码实现如下:
方法一:
JAVA里的PING是在JDK 1.5后用了新的函数isreachable()函数去实现,但是结果通常返回false
原因:此方法用于测试是否可以达到该地址。实现尽最大努力试图到达主机,但防火墙和服务器配置可能阻塞请求,使其在某些特定的端口可以访问时处于不可到达状态。如果可以获得权限,则典型实现将使用 ICMP ECHO REQUEST;否则它将试图在目标主机的端口 7 (Echo) 上建立 TCP 连接。
public static boolean isOnline(String hostname) { try { InetAddress ia; boolean isonline = false; ia = InetAddress.getByName(hostname);// 例如:www.baidu.com isonline = ia.isReachable(1500); //超时时间1.5秒 return isonline; } catch (UnknownHostException e) { // TODO Auto-generated catch block System.out.println("address:" + hostname + " is not unknown"); } catch (IOException e) { // TODO Auto-generated catch block System.out.println("address:" + hostname + " is not reachable"); } return false; }
方法二(推荐):
使用socket 对端口做TELNET操作, 结果比较准确
public static boolean isOnline(String hostname, int port) { Socket server = null; try { server = new Socket(); InetSocketAddress address = new InetSocketAddress(hostname, port);//例如 www.baidu.com 80 server.connect(address, 3000); System.out.println("ok!"); return true; } catch (UnknownHostException e) { System.out.println("wrong!"); e.printStackTrace(); } catch (IOException e) { System.out.println("wrong"); e.printStackTrace(); } return false; }
总结
以上就是本文关于java检查服务器的连通两种方法代码分享的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:
如有不足之处,欢迎留言指出。