当有新的连接可用时,在 Java 程序中(使用 JNI)有什么方法可以通知 Windows 操作系统?目前,我必须检查的唯一方法是轮询尝试下载网页的函数。如果下载成功并且没有抛出异常,那么我可以猜测有 Internet 连接。
但是,更好的解决方案可能是这个:
- 在程序启动时,检查 Internet 连接
- 如果没有可用的互联网连接,请“注册”Windows 网络通知和 WAIT()
- 用户连接到 Internet,Windows os 通知 Java 机器=> 线程唤醒
- 做点事....
当有新的连接可用时,在 Java 程序中(使用 JNI)有什么方法可以通知 Windows 操作系统?目前,我必须检查的唯一方法是轮询尝试下载网页的函数。如果下载成功并且没有抛出异常,那么我可以猜测有 Internet 连接。
但是,更好的解决方案可能是这个:
下面做一个 ping,比下载一个页面花费更少,并且你可以更改超时:
InetAddress.getByName( "stackoverflow.com" ).isReachable( 4000 )
以低优先级放入线程循环中:
while( ! InetAddress.getByName( "stackoverflow.com" ).isReachable( 4000 )) {
Thread.slepp( 1000L );
}
我没有更好的。
InetAddress.isReachable
文档:
测试该地址是否可达。实现会尽最大努力尝试访问主机,但防火墙和服务器配置可能会阻止请求,从而导致无法访问状态,而某些特定端口可能可以访问。如果可以获得特权,典型的实现将使用 ICMP ECHO REQUEST,否则它将尝试在目标主机的端口 7 (Echo) 上建立 TCP 连接。