我试图每隔5秒检查一次Internet是否持续开启,我在下面的代码中写了一些代码,但它始终如何在wait()内等待无限。
我写的代码:
Socket socket = null;
public void checkInternetConnectivity() throws InterruptedException {
boolean reachable = false;
ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
service.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
try {
socket = new Socket("xxx.xxx.xxx.x", xx);
} catch (UnknownHostException e) {
stopApp();
} catch (IOException e) {
stopApp();
}
}
}, 0, 5, TimeUnit.SECONDS);
synchronized (this) {
wait();
}
}
private void stopApp() {
System.out.println("Internet Not Available stopping app");
System.exit(0);
}
它总是卡在下面:
synchronized (this) {
wait();
}
答案 0 :(得分:0)
您可以这样做:
InetAddress.isReachable
根据您的需求,您应考虑尝试通过
到达特定主机private static boolean googleIsAvailable() {
try {
final URL url = new URL("http://www.google.com");
final URLConnection connection = url.openConnection();
connection.connect();
connection.getInputStream().close();
return true;
} catch (MalformedURLException e) {
throw new RuntimeException(e);
} catch (IOException e) {
return false;
}
}
如果您正在与Web服务通信,则Web服务应提供GET方法以检查其是否可用。
如果您需要不断检查,请尝试类似
Socket s = new Socket(SERVER_ADDRESS, TCP_SERVER_PORT);
while(s.isConnected()){
//do your stuff
}
您还应该签出keepAlive选项。
但是更重要的问题是,如果互联网连接不再可用,您的应用程序会发生什么?
如果服务器不再可用,大多数方法将引发异常。
您可以抓住他们并对它做出反应。