В Android как отключить розетку?

Итак, у меня есть сокет, который подключен к внешнему веб-адресу, и когда он получает определенное сообщение, он должен отключиться. Я попытался позвонить socket.close(), но socket.isConnected() все еще верен. Не повезло с поиском ответа


person user2312638    schedule 23.08.2013    source источник


Ответы (6)


isConnected() сообщает только об успешном подключении к сокету. isClosed() сообщает вам, звонили ли вы close().

Посмотрите этот ответ ребят https://stackoverflow.com/a/3701249/2453771

person Nick    schedule 23.08.2013
comment
Итак, следующий вопрос: закрывает ли соединение соединение? А если не то что будет? - person user2312638; 23.08.2013
comment
Вызов close() закрывает вашу сторону сокета. Однако сервер не уведомляется о том, что вы закрыли сокет. - person Nick; 23.08.2013

«Когда вы используете Socket (), который вы, кажется, упустили из виду, Socket.isConnected () сообщает вам, был ли вызван Socket.connect () или нет. Аналогично для isClosed () и close ().

Путаница по поводу этих методов возникает из-за того, что состояние сокета, находящегося под управлением приложения, путают с состоянием всего соединения, которое находится под контролем протокола. isConnected () и isClosed () сообщают, что вы сделали с сокетом. Нет никаких API, кроме чтения и записи для определения состояния соединения ».

Oracle documantion ‹Здесь хорошо объяснено, что как только вы вызываете .close(), соединение закрывается, и вы можете проверить с помощью isClosed().

.close ():

Закрывает этот сокет.

Любой поток, заблокированный в данный момент при операции ввода-вывода на этом сокете, вызовет SocketException.

После закрытия сокет становится недоступным для дальнейшего использования в сети (т. Е. Не может быть переподключен или восстановлен). Необходимо создать новый сокет.

person Ahmed Ekri    schedule 23.08.2013

isConnected() и isClosed() сообщают вам текущее состояние вашего сокета (на вашей стороне). isConnected() сообщает вам, вы подключили этот сокет, а isClosed() сообщает вам, вы закрыли ли этот сокет. Пока вы этого не сделаете, он вернет false.

person ucMedia    schedule 03.01.2019

Да, верно. Конечно, кажется, socket.close() и socket.isConnected() независимы друг от друга. Я бы хотел, чтобы именование методов не было таким запутанным.

Из официального Android SDK:

public boolean isConnected()
Возвращает состояние подключения сокета.

Примечание: закрытие сокета не очищает его состояние подключения, что означает, что этот метод вернет true для закрытого сокета.

P.S. более интуитивно его следует называть wasConnected() ????

person San Askaruly    schedule 16.07.2021

http://developer.android.com/reference/java/net/Socket.html#close()

Сделайте контрольную сумму для возвращенных данных, убедитесь, что вы получили правильное значение. Если это так, и вы позвонили и попробовали все поймать, все должно быть в порядке.

Вы можете посмотреть в отладчике и убедиться, что ничего не протекает.

person Tim Spann    schedule 23.08.2013

пытаться

socket.isClosed() 

Возвращает логическое значение, указывающее, закрыт ли этот сокет. См. сокеты

person user1743673    schedule 23.08.2013