Einen Java-Socket so konfigurieren, dass er beim Trennen der Verbindung schnell fehlschlägt?

StackOverflow https://stackoverflow.com/questions/22720

Frage

Ich habe einen Abhörport auf meinem Server, mit dem ich über eine Java-Klasse eine Verbindung herstelle Socket Schnittstelle, d.h.

Socket mySocket = new Socket(host,port);

Ich schnappe mir dann ein OutputStream, mit a dekorieren PrintWriter im Autoflush-Modus und ich lache – außer wenn der Abhöranschluss geschlossen wird.Dann verstehe ich

tcp4       0      0  *.9999                 *.*                    LISTEN
tcp        0      0  127.0.0.1.45737        127.0.0.1.9999         CLOSE_WAIT

und ich kann das Problem im Programm scheinbar nicht erkennen - ich habe es mit dem versucht isConnected() Methode auf dem Socket, aber es scheint nicht zu wissen, dass die Verbindung geschlossen ist.

Ich möchte über das Problem informiert sein, wenn ich das nächste Mal versuche, an den Socket zu schreiben, damit ich versuchen kann, die Verbindung wiederherzustellen und das Problem zu melden.

Irgendwelche Ratschläge, bitte?

Vielen Dank an alle

War es hilfreich?

Lösung

Eine kurze Auszeit festlegen?

Tut isOutputShutdown() Bekommst du nicht, was du willst?

Man könnte immer eine bauen SocketWatcher Klasse, die sich eigenständig entwickelt Thread und versucht wiederholt, leere Zeichenfolgen in das zu schreiben Socket bis das a aufwirft SocketClosedException.

Andere Tipps

Die einzige zuverlässige Möglichkeit, eine unterbrochene Verbindung in TCP zu erkennen, besteht darin, darauf zu schreiben, was schließlich zu einer IOException „Verbindung zurücksetzen“ führt.Aufgrund der Pufferung geschieht dies jedoch nicht beim ersten Schreibvorgang nach der Trennung, sondern bei einem nachfolgenden Schreibvorgang.Daran können Sie nichts ändern.

Stellen Sie einen anderen Thread zum Lesen aus dem Socket ein.Es wird blockiert, bis der Socket geschlossen wird, und dann wird eine Ausnahme ausgelöst.Fangen Sie diese Ausnahme ab, um den Abschluss sofort zu erkennen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top