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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top