私はApacheのTelnetClient
を使ってtelnet接続を開くAndroidアプリを作っています。このため、私はRunnable
を作成しました。これはいつまでもprocessInput()
で読み続けるでしょう。ソケットがまだ接続されている場合はisConnected()
でチェックし、そうでなければ、実行可能ファイルから戻り、リスナーのonDisconnected()
を呼び出します。しかし、この最後の方法は、私がWi-Fiを起動しても呼び出されることはありません。AndroidでApache SocketClientの接続喪失を検出する方法は?
Wi-Fiの状態を確認することはできますが、サーバーがハングアップしたり、他の理由で接続が失われたりすることはありません。接続が閉じられたときはどうすれば検出できますか?
private class ClientThread implements Runnable {
@Override
public void run() {
while (true) {
if (!client.isConnected()) {
for (NewRecordListener listener : listeners)
listener.onDisconnected();
try { client.disconnect(); } catch (IOException e) {}
return;
}
try {
processInput();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
"ソケットがまだ接続されている場合はisConnected()でチェックします" - できません。 "戻り値: ソケットがサーバに正常に接続されている場合はtrue" - 接続が切断されるとすぐにfalseになることを必ずしも意味しません。 – Fildor
「接続が閉じられたときの検出方法」 - 正常でない接続の中止の場合、ほとんどの場合、書き込みを試みている間にIOExceptionが発生する可能性があります。 – Fildor
定期的に[AreYouThere](https://commons.apache.org/proper/commons-net/apidocs/org/apache/commons/net/telnet/TelnetClient.html#sendAYT(long))を使用することができます。 – Fildor