Meine Chat-Anwendung verbindet sich mit einem Server und Informationen werden vom Benutzer gesendet/empfangen. Wenn die Verbindung ändert, wie 3g-> wifi, wifi-> 3g, eine Datenverbindung zu verlieren, usw., bleibt die socket manchmal für lange vor dem Trennen verbunden. Während dieser Zeit ist es unmöglich zu sagen, ob die Verbindung noch aktiv ist, es scheint, als ob Nachrichten gerade gesendet werden. Zu anderen Zeiten wird beim Senden einer Nachricht ein IO-Fehler ausgelöst und die Verbindung getrennt.Socket wird nicht getrennt, wenn sich die Konnektivität ändert
Neben dem Implementieren von Code zum Erkennen von Verbindungsänderungen und erneutem Verbinden ist es möglich, dass der Socket sofort eine IO-Ausnahme auslöst, wenn sich die Konnektivität ändert?
Edit: Ich verbinde mit dem folgenden Code:
Socket sock = new Socket();
sock.connect(new InetSocketAddress(getAddress(), getPort())), getTimeout());
//get bufferedReader and read until BufferedReader#readLine() returns null
Ich verwende setSoTimeout nicht als Daten nicht für längere Zeit auf dem Remote-Server-Konfiguration abhängig übertragen werden können.
Dann siehe http://stackoverflow.com/questions/969866/java-detect-lost-connection http://stackoverflow.com/questions/155243/why-is-it-implove-ohne-versuchen-io-to-detect-das-tcp-socket-was-grace –