Отчеты о разъединении Java Socket и C # Disconnection - PullRequest
4 голосов
/ 10 мая 2010

в C #, когда соединение сокетов прекращается, другой узел информируется об этом перед тем, как завершить соединение, таким образом, оставшийся узел может обновить состояние соединения.

в Java, когда я разрываю канал связи, другой узел продолжает сообщать о действительном соединении.

мне нужно реализовать цикл чтения (имеет смысл), который сообщает о потере соединения, когда он получает -1 во время чтения (в C # это 0, я думаю)?

спасибо за понимание.

РЕДАКТИРОВАТЬ: спасибо вам обоим. как я подозревал и упоминал в своем посте, что для подтверждения состояния подключения требуется дополнительная проверка.

Ответы [ 2 ]

2 голосов
/ 11 мая 2010

Если удаленная сторона соединения исчезнет, ​​обычно вы получаете IOException от InputStream / InputChannel, если разъединение может быть обнаружено. Если это не может обнаружить разъединение, IOException будет в конечном счете выдан, когда время чтения сокета истекает. Время ожидания ожидания можно настроить с помощью Socket.setSoTimeout ().

0 голосов
/ 11 мая 2010

В java вы узнаете, что другой конец сокета закрыт, только когда вы читаете / записываете в / из сокета или запрашиваете состояние входного потока (например, InputStream.available()). Я не думаю, что есть какое-либо асинхронное уведомление о том, что другой конец закрыт.

Как вы проверяете, что сокет все еще открыт?

Вы можете опрашивать метод InputStream.available(), и если он возвращает -1, вы знаете, что сокет закрыт. Конечно, вы также можете читать данные, если это подходит вам.

См. InputStream.available ()

...