Итак, у меня есть сокет, который подключен к внешнему веб-адресу, и когда он получает определенное сообщение, он должен отключиться. Я попытался позвонить socket.close()
, но socket.isConnected()
все еще верен. Не повезло с поиском ответа
В Android как отключить розетку?
Ответы (6)
isConnected()
сообщает только об успешном подключении к сокету. isClosed()
сообщает вам, звонили ли вы close()
.
Посмотрите этот ответ ребят https://stackoverflow.com/a/3701249/2453771
close()
закрывает вашу сторону сокета. Однако сервер не уведомляется о том, что вы закрыли сокет.
- person Nick; 23.08.2013
«Когда вы используете Socket (), который вы, кажется, упустили из виду, Socket.isConnected () сообщает вам, был ли вызван Socket.connect () или нет. Аналогично для isClosed () и close ().
Путаница по поводу этих методов возникает из-за того, что состояние сокета, находящегося под управлением приложения, путают с состоянием всего соединения, которое находится под контролем протокола. isConnected () и isClosed () сообщают, что вы сделали с сокетом. Нет никаких API, кроме чтения и записи для определения состояния соединения ».
Oracle documantion ‹Здесь хорошо объяснено, что как только вы вызываете .close()
, соединение закрывается, и вы можете проверить с помощью isClosed()
.
.close ():
Закрывает этот сокет.
Любой поток, заблокированный в данный момент при операции ввода-вывода на этом сокете, вызовет SocketException.
После закрытия сокет становится недоступным для дальнейшего использования в сети (т. Е. Не может быть переподключен или восстановлен). Необходимо создать новый сокет.
isConnected()
и isClosed()
сообщают вам текущее состояние вашего сокета (на вашей стороне). isConnected()
сообщает вам, вы подключили этот сокет, а isClosed()
сообщает вам, вы закрыли ли этот сокет. Пока вы этого не сделаете, он вернет false.
Да, верно. Конечно, кажется, socket.close()
и socket.isConnected()
независимы друг от друга. Я бы хотел, чтобы именование методов не было таким запутанным.
Из официального Android SDK:
public boolean isConnected()
Возвращает состояние подключения сокета.Примечание: закрытие сокета не очищает его состояние подключения, что означает, что этот метод вернет true для закрытого сокета.
P.S. более интуитивно его следует называть wasConnected()
????
http://developer.android.com/reference/java/net/Socket.html#close()
Сделайте контрольную сумму для возвращенных данных, убедитесь, что вы получили правильное значение. Если это так, и вы позвонили и попробовали все поймать, все должно быть в порядке.
Вы можете посмотреть в отладчике и убедиться, что ничего не протекает.
пытаться
socket.isClosed()
Возвращает логическое значение, указывающее, закрыт ли этот сокет. См. сокеты