zoukankan      html  css  js  c++  java
  • Java 程序检查远程服务器状态

    通常我们以命令的方式判断远程服务器是否正常运行有两种方式,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;
        }
  • 相关阅读:
    [VC++入门]C++中常用的运算符及微软自定义类型
    搜索引擎蜘蛛爬虫原理
    Enterprise Library 5.0
    Installshield 12 中文系列教程之 定义安装必要条件
    installshield脚本
    c# 事物处理
    InStallShield网络资源参考
    Could not execute query against OLE DB provider 'OraOLEDB.Oracle'
    frameset小结
    最痛心的距离
  • 原文地址:https://www.cnblogs.com/reynold-lei/p/3157964.html
Copyright © 2011-2022 走看看