-1

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

有什么解决办法吗?

4

4 回答 4

2

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

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

try {
    HttpRequest.get("http://stackoverflow.com").send();
    return true;
} catch (Exception ex) {
    return false;
}
于 2013-03-14T09:16:19.083 回答
1

如@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);
    }
}

主链接

于 2013-03-14T09:22:24.660 回答
0

您可以ping主机。看

ping IP 地址的 java 代码

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

于 2013-03-14T09:15:22.510 回答
0

您可以为此使用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;
} 

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

于 2013-03-14T09:16:39.300 回答