2011-12-12 7 views
3

Если у меня есть подключенный сокет, и он ждет (блокирует), чтобы получать некоторые данные с удаленной машины, но так или иначе, удаленная машина теряет свое соединение, как я могу сделать это так, чтобы он блокировал блокировку, но время после определенный период времени без получения каких-либо данных? Я использую объект сканера для считывания данных из сокета и объекта PrintWriter писать,Как установить таймауты чтения на Java Socket/SSLSocket?

// Get InputStream 
scanner = new Scanner(clientSocket.getInputStream()); 
// Get OutputStream 
printWriter = new PrintWriter(clientSocket.getOutputStream(), true); 
+1

посмотрите здесь: HTTP: // документы. oracle.com/javase/6/docs/api/java/net/Socket.html#setSoTimeout%28int%29 – PeterMmm

ответ

6

Если вы используете сокет, вы можете set timeout option

+1

@normalocity - ваше редактирование не имеет смысла, метод явно проявляется в javadoc, на который вы ссылаетесь. Верните его назад. –

+0

Хм - сегодня должен быть случай блайндов. Не беспокойся. – jefflunt

+0

, но когда я прочитал из сокета, используя scanner.nextLine(), его спецификация показывает, что он не генерирует исключение SocketTimeoutException, как тогда я обнаружил бы, когда произойдет тайм-аут? – shawn