博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 程序检查远程服务器状态
阅读量:5286 次
发布时间:2019-06-14

本文共 1735 字,大约阅读时间需要 5 分钟。

通常我们以命令的方式判断远程服务器是否正常运行有两种方式,ping 或 telnet 一个远程端口。假设我们要检查的远程服务器都是 Linux 系统。

从 JDK 1.5 以后, InetAddress 类提供一个 isReachable() 方法,用来判断远程主机是否可以到达,这个方法的使用的时候一定要注意以下几点:如果客户端是 Windows 系统,JDK 不会向服务器发送 ICMP 的请求,因为 Windows 没有提供可被调用的底层接口,这时 JDK 会自动向服务器的 Port 7 发起一个 Socket 连接,如果连接也失败,则认为服务器无法到达,返回False。 注意在客户端执行此程序无须管理员用户,但要求服务器端的防火墙放行 Port 7 的访问(大部分 Linux 发行版此端口默认是禁止访问的)。

如果客户端是 Linux 系统, JDK 可以使用底层接口来向服务器发送 ICMP 请求,但执行此程序的用户必须拥有 root 权限,否则 JDK 也会像 Widnows 一样以 Socket 方式进行验证,即向服务器的 Port 7 发起一个 Socket 连接来进行判断。

如果不用 isReachable(),比较简单的方法是 Socket 连接一个指定的端口,但前提是确定此端口可以被访问,如 Web Server 的 80 端口。这种方式对用户权限没有要求,唯一要注意的是,如果无法连接此端口,有可能只是应用服务出现问题,不一定是服务器无法连接。

private static boolean isReachable(String ip, String port, int timeout) {
boolean reachable = false; // 如果端口为空,使用 isReachable 检测,非空使用 socket 检测 if(port == null) {
try {
InetAddress address = InetAddress.getByName(ip); reachable = address.isReachable(timeout); } catch (Exception e) {
logger.error(e.getMessage()); reachable = false; } } else {
Socket socket = new Socket(); try {
socket.connect(new InetSocketAddress(ip, Integer.parseInt(port)), timeout); reachable = true; } catch (Exception e) {
logger.error(e.getMessage()); reachable = false; } finally {
try {
if(socket != null) socket.close(); }catch (Exception e) {
} } } return reachable; }

转载于:https://www.cnblogs.com/reynold-lei/p/3157964.html

你可能感兴趣的文章
虚拟DOM,真实的JS对象,操作内存中的js对象要比操作DOM节省性能?
查看>>
拓扑排序-hihocoder1175
查看>>
encodeURIComponent与URLDecoder.decode用法
查看>>
LinkedList 和 ArraryList的区别. <java>
查看>>
大数据学习大纲,大数据应该怎么学
查看>>
HTTP协议学习笔记
查看>>
sublime 打开命令窗口监控
查看>>
ubuntu16.04降级内核版本至3.13.0-85
查看>>
Junit中的异常测试
查看>>
九度OJ 1038:Sum of Factorials(阶乘的和) (DP、递归)
查看>>
DRF之分页器组件
查看>>
JS中this的用法
查看>>
高频交易算法研发心得--MACD指标算法及应用
查看>>
python读写文件
查看>>
使用Visual Studio 2013进行单元测试--初级篇
查看>>
花式索引
查看>>
用python正则提取字符串的方法
查看>>
NHibernate系列学习(三)-条件查询Criteria
查看>>
C++11并发——多线程std::mutex (二)
查看>>
vue router
查看>>