Вторая попытка записи сокета Java не удалась - PullRequest
0 голосов
/ 15 апреля 2011

У меня есть функция:

...
socket.getOutputStream().write("something".getBytes());
socket.getOutputStream().flush();
...

Работает нормально.Держите розетку открытой.Попытка вызвать эту функцию снова, но получить ошибку: java.net.SocketException: Сломанный канал

, несмотря на тот факт, что

socket.isClosed - false
socket.isOutputShutdown - false
socket.isConnected - true

Ответы [ 2 ]

3 голосов
/ 15 апреля 2011

Скорее всего, другой конец закрыл соединение. Возможно, что первая запись не удалась, так как write () не гарантирует доставку. Вы получаете Исключение только тогда, когда он знает, что другой конец не слушает.

isClosed означает; Я закрыл соединение

isOutputShutdown означает; я отключил выход

isConnected означает; это когда-либо было связано

Единственный способ обнаружить, что соединение действительно установлено, - это получить ответ от другого конца, сообщающий, что он получил ваши данные. например ответ на сердцебиение. Без этого ответа (который должен быть частью вашего протокола) вы не можете быть уверены, что другой конец получил его.

0 голосов
/ 15 апреля 2011

Сломанный канал означает, что вы записали данные в соединение, которое уже было закрыто другим концом. Это может указывать на ошибку протокола приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...