Quindi ho un socket connesso a un indirizzo Web esterno e quando viene visualizzato un determinato messaggio, è necessario disconnettersi. Ho provato a chiamare socket.close()
ma socket.isConnected()
è ancora vero. Nessuna fortuna alla ricerca di una rispostaIn Android, come si disconnette un socket?
risposta
isConnected()
dice solo se hai effettuato una connessione riuscita a una presa. isClosed()
ti dice se hai chiamato close()
.
Guarda cosa ragazzi risposta https://stackoverflow.com/a/3701249/2453771
"Quando si utilizza Socket(), che ti sembra di aver trascurato, Socket.isConnected() indica se Socket.connect() è stato chiamato o no. Allo stesso modo per isClosed () e close().
confusione su questi metodi si ottiene da confondere lo stato della presa , che è sotto il controllo della domanda, con lo stato del collegamento complessivo, che è sotto il controllo del protocollo isConnected() e isClosed() dicono cosa avete fatto la presa. Non esistono API diverse da leggere e scrivere per determinare lo stato della connessione."
Oracle documantion < qui è ben spiegato che una volta che si chiama .close()
la connessione viene chiusa e si può controllare da isClosed()
.
.close():
chiude questa presa
.Qualsiasi thread attualmente bloccato in un'operazione I/O su questo socket eseguirà un SocketException per .
Una volta che una presa è stata chiusa, non è disponibile per ulteriori uso di rete (cioè non può essere ricollegato o rimbalzo). È necessario creare una nuova presa .
http://developer.android.com/reference/java/net/Socket.html#close()
fare una somma di controllo sui dati restituiti, essere sicuri di ottenere il valore corretto. Se è così e hai chiamato vicino e prova a prendere tutto, dovrebbe andare bene.
Si può guardare in un debugger e assicurarsi che non ci siano perdite.
Ok quindi la prossima domanda è la chiamata chiudi chiudi la connessione? E se no, cosa succederà? – user2312638
Chiamando 'close()' chiude il tuo lato del socket. Tuttavia, al server non viene notificato che hai chiuso il socket. – Nick