【问题标题】:How can I figure out network connection is available in java? [duplicate]java - 如何确定网络连接在java中可用? [复制]
【发布时间】:2013-03-14 09:10:47
【问题描述】:

我如何才能确定 java 中的网络连接是否可用?我想获取有关网络连接的信息。如果可用,我将连接到网络以获取数据,否则我使用本地数据库。

有什么解决办法吗?

【问题讨论】:

  • NetworkInterface 没有为此提供一些东西。
  • 怎么回事?我想务实地检查一下。

标签: java network-connection


【解决方案1】:

如你所说,尝试连接网络。如果失败,重复例如3次。如果仍然失败,请使用本地数据库。您不必额外 ping 任何东西。

为简单起见,您可以使用Jodd HTTP 库,例如:

try {
    HttpRequest.get("http://stackoverflow.com").send();
    return true;
} catch (Exception ex) {
    return false;
}

【讨论】:

    【解决方案2】:

    如@igor所说:“尝试连接网络,如你所说。如果失败,重复例如3次。如果仍然失败,使用本地数据库。你不必额外ping任何东西。”

    例如:

        public class InternetConnection {
        /*  use at least one reliable host, in most cases you will want
            to use the one you're working with later    */
        private static final String CHECK_URL = "http://www.t-online.de/";
        public static InternetConnectionState isAvailable() {
            try {
                URL url = new URL(InternetConnection.CHECK_URL);
                HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();
                Object objData = urlConnection.getContent();
            } catch(UnknownHostException exception) {
                return new InternetConnectionState(false);
            } catch(IOException exception) {
                return new InternetConnectionState(false);
            }
            return new InternetConnectionState(true);
        }
    }
    

    Main link

    【讨论】:

      【解决方案3】:

      您可以 ping 主机。 见

      java code to ping an IP address

      如果您想检查数据库是否可访问,您可能会捕获在尝试连接期间可能发生的连接异常。随后,如果失败,您可以使用本地数据库

      【讨论】:

        【解决方案4】:

        你可以使用java.net.NetworkInterface,这里是一个简单的例子,不知道怎么做:

        public boolean isConnectedToNetwork() {
            Enumeration<NetworkInterface> interfaceEnumeration = NetworkInterface.getNetworkInterfaces();
            while (interfaceEnumeration.hasMoreElements()) {
            NetworkInterface each = interfaceEnumeration.nextElement();
        
             if (!each.isLoopback() && each.isUp()) {
                  return true;
              }
            }
            return false;
        } 
        

        请注意,您必须检查它是否不是环回接口。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-05-26
          • 1970-01-01
          • 1970-01-01
          • 2023-03-06
          • 1970-01-01
          • 1970-01-01
          • 2011-06-24
          • 2021-08-24
          相关资源
          最近更新 更多