4

当有新的连接可用时,在 Java 程序中(使用 JNI)有什么方法可以通知 Windows 操作系统?目前,我必须检查的唯一方法是轮询尝试下载网页的函数。如果下载成功并且没有抛出异常,那么我可以猜测有 Internet 连接。

但是,更好的解决方案可能是这个:

  1. 在程序启动时,检查 Internet 连接
  2. 如果没有可用的互联网连接,请“注册”Windows 网络通知和 WAIT()
  3. 用户连接到 Internet,Windows os 通知 Java 机器=> 线程唤醒
  4. 做点事....
4

1 回答 1

0

下面做一个 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 连接。

于 2012-10-28T08:47:15.413 回答