Configurare Java Presa per il fail-fast al momento della disconnessione?
-
09-06-2019 - |
Domanda
Ho una porta in ascolto sul mio server a cui mi connetto utilizzando una classe Java e l' Socket
interfaccia, cioè
Socket mySocket = new Socket(host,port);
Ho poi afferrare un OutputStream
, decorare con una PrintWriter
in autoflush modalità e sto ridendo - salvo il caso in ascolto la porta si chiude.Poi ho
tcp4 0 0 *.9999 *.* LISTEN
tcp 0 0 127.0.0.1.45737 127.0.0.1.9999 CLOSE_WAIT
e io non riesco a individuare il problema, nel programma, ho provato con il isConnected()
metodo sulla presa, ma non mi sembra di sapere che la connessione è chiusa.
Voglio essere a conoscenza del problema, la prossima volta provo a scrivere alla Presa in modo che io possa provare a riconnettersi e segnalare il problema.
Qualche consiglio per favore?
Grazie a tutti
Soluzione
Impostare un breve periodo di timeout?
Non isOutputShutdown()
non ottenere ciò che si desidera?
Si può sempre costruire un SocketWatcher
classe che gira nel proprio Thread
e più volte tenta di scrivere stringhe vuote per la Socket
fino a che solleva un SocketClosedException
.
Altri suggerimenti
L'unico modo affidabile per rilevare l'interruzione di una connessione TCP è per la scrittura, che finirà per causare una connessione reset' IOException.Tuttavia, a causa di buffering che questo non accadrà, il primo scrivere dopo la disconnessione,ma in una successiva scrittura.Non si può fare nulla su questo.
Impostare un thread diverso per la lettura dal socket.Blocca fino a quando il socket viene chiuso, e quindi verrà generata un'eccezione.Cattura l'eccezione di rilevare l'chiudere immediatamente.