2011-02-01 4 views
3

Я используюКак я мог знать статус соединения сокета внутри PrintWriter

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

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

Поскольку Println функция не имеет возвращаемого значения, это не бросать никаких исключений либо. Как я могу узнать, что отключение отключено?

Благодаря

ответ

1

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

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

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

1

посмотреть здесь, http://download.oracle.com/javase/6/docs/api/java/net/Socket.html

булево IsClosed() Возвращает закрытое состояние сокета.

boolean isConnected(), Возвращает состояние соединения сокета.

+3

эти вызовы API вводят в заблуждение и не могут быть использованы для определения того, действительно ли вы в настоящее время подключены, см. Здесь код http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk /6-b14/java/net/Socket.java – jtruelove