在java中不断检查internet连接
我试着每5秒钟检查一次互联网是否持续打开,我写了下面的代码,但有些代码显示它是如何在等待和无限等待中运行的 我写的代码:在java中不断检查internet连接,java,wait,Java,Wait,我试着每5秒钟检查一次互联网是否持续打开,我写了下面的代码,但有些代码显示它是如何在等待和无限等待中运行的 我写的代码: Socket socket = null; public void checkInternetConnectivity() throws InterruptedException { boolean reachable = false; ScheduledExecutorService service = Executors.newSingleThread
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();
}
你可以做:
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选项
但更重要的问题是,如果internet连接不再可用,应用程序中会发生什么情况
如果服务器不再可用,大多数方法都会抛出异常
你可以抓住他们并做出反应。如果你在等待,是否也应该有人通知你?那是哪里?如果是预定任务,为什么要等待?你在哪里通知?@SMA-我同意你的意见,但不确定我在这里通知的确切位置。为什么不期望它?以前你所做的只是设置一个任务在另一个线程中运行。谢谢你的回答,但我想它不会经常检查。它只会检查我何时何地调用此函数。更新了我的答案。。。套接字连接具有断开连接的方法