4

Javaプログラム(JNIを使​​用)で新しい接続が利用可能になったときにWindows OSから通知を受ける方法はありますか? 現時点でこれを確認する唯一の方法は、Web ページをダウンロードしようとする関数をポーリングすることです。ダウンロードが成功し、例外がスローされない場合は、インターネット接続があると推測できます。

ただし、より良い解決策は次のとおりです。

  1. プログラムの開始時に、インターネット接続を確認します
  2. インターネット接続が利用できない場合は、Windows ネットワーク通知と WAIT() に「登録」します。
  3. ユーザーがインターネットに接続し、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 に答える