【发布时间】:2013-03-14 09:10:47
【问题描述】:
我如何才能确定 java 中的网络连接是否可用?我想获取有关网络连接的信息。如果可用,我将连接到网络以获取数据,否则我使用本地数据库。
有什么解决办法吗?
【问题讨论】:
-
NetworkInterface 没有为此提供一些东西。
-
怎么回事?我想务实地检查一下。
我如何才能确定 java 中的网络连接是否可用?我想获取有关网络连接的信息。如果可用,我将连接到网络以获取数据,否则我使用本地数据库。
有什么解决办法吗?
【问题讨论】:
如你所说,尝试连接网络。如果失败,重复例如3次。如果仍然失败,请使用本地数据库。您不必额外 ping 任何东西。
为简单起见,您可以使用Jodd HTTP 库,例如:
try {
HttpRequest.get("http://stackoverflow.com").send();
return true;
} catch (Exception ex) {
return false;
}
【讨论】:
如@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);
}
}
【讨论】:
您可以 ping 主机。 见
java code to ping an IP address
如果您想检查数据库是否可访问,您可能会捕获在尝试连接期间可能发生的连接异常。随后,如果失败,您可以使用本地数据库
【讨论】:
你可以使用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;
}
请注意,您必须检查它是否不是环回接口。
【讨论】: