Как я могу узнать состояние сокетного соединения внутри PrintWriter - PullRequest
3 голосов
/ 02 февраля 2011

Я использую

PrintWriter output = new PrintWriter(socket.getOutputStream(), true);

......
output.println(message);
......

Поскольку функция println не имеет возвращаемого значения, она также не выдает никаких исключений.Откуда мне знать, что отключение отключено?

Спасибо

Ответы [ 2 ]

1 голос
/ 02 февраля 2011

Вызов PrintWriter.checkError() сообщит вам, если произошла какая-либо ошибка. Он не будет точно сообщать вам, какая ошибка произошла, но если checkError возвращает true, вы можете сделать вывод, что наиболее вероятной причиной является закрытый или сломанный сокет.

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

Наконец, если вы действительно хотите точно знать, когда и почему поток "провалился", вы можете создать оболочку для OutputStream, которая поймает IOException в методах записи (и т. Д.) И перемотает это завернуто в какое-то непроверенное исключение.

1 голос
/ 02 февраля 2011

см. Здесь, http://download.oracle.com/javase/6/docs/api/java/net/Socket.html

логическое значение isClosed (), возвращает закрытое состояние сокета.

логическое значение isConnected (), возвращает состояние соединения сокета.

...