Итак, у меня есть сокет, который подключен к внешнему веб-адресу, и когда он получает определенное сообщение, он должен отключиться. Я попытался позвонить socket.close()
, но socket.isConnected()
по-прежнему прав. Не повезло найти ответВ Android как отключить сокет?
ответ
isConnected()
сообщает только, успешно ли вы подключились к сокету. isClosed()
говорит вам, если вы позвонили close()
.
Заканчивать эти ребята Ответные https://stackoverflow.com/a/3701249/2453771
"При использовании гнезда(), который вы, кажется, забыли, Socket.isConnected() говорит вам Socket.connect() был ли называется или нет. Аналогично для IsClosed () и закрытие().
Путаница над этими методами результатами в заблуждении состояния сокета, который находится под контролем приложения, с состоянием общей связи, которая находится под контролем протокола . isConnected() и isClosed() сообщают, что вы сделали для гнездо. Там нет других API, чем читать и писать для определения состояния соединения.»
Oracle documantion < здесь это хорошо объяснил, что после вызова .close()
соединение закрывается, и вы можете проверить isClosed()
.
.close():
закрывает данный сокет
.Любой поток, который в настоящий момент заблокирован в операции ввода-вывода в этом сокете, будет выкинуть SocketException.
После того, как розетка была закрыта, она недоступна для использования в сети (т. Е. Не может быть восстановлено или восстановлено). Должен быть создан новый сокет .
http://developer.android.com/reference/java/net/Socket.html#close()
Выполните контрольную сумму возвращаемых данных, убедитесь, что вы получите правильное значение. Если так, и вы позвонили близко и попробуете все, все должно быть хорошо.
Вы можете посмотреть в отладчике и убедиться, что ничего не течет.
Хорошо, так что следующий вопрос заключается в вызове close kill the connection? А если нет, то что будет? – user2312638
Вызов 'close()' закрывает вашу сторону сокета. Сервер не уведомлен о том, что вы закрыли сокет. – Nick