2011-10-29 10 views
6

Tengo el siguiente código que lee la respuesta de un servidor POP a través de Sockets en Java. Pero el problema es a veces, cuando uso la función readLine() para leer desde el servidor y si el servidor no responde con ninguna respuesta, mi aplicación se bloqueará allí, esperando una respuesta del servidor.Establecer un límite de tiempo de espera para readLine()?

socket.connect(new InetSocketAddress("pop.server.com", 110), 3000); 
input = socket.getInputStream(); 
BufferedReader incoming = new BufferedReader(new InputStreamReader(input)); 
incoming.readLine(); //This line will cause my application to hang if the server does not respond with a reply 

¿Hay una manera de establecer un tiempo de espera o de otras maneras que cuando el servidor no responde después de un cierto período de tiempo, la aplicación debe dejar de esperar una respuesta y continuar su otra ejecución?

Respuesta

4

le sugiero que trate Socket.setSoTime(timeout)

+2

Esto no tiempo de espera en la lectura de toda la línea sin embargo. ¿Qué pasa si el cliente sigue enviando bytes pero nunca termina la línea? – grom

+0

@grom Eso es un riesgo. El cliente siempre puede enviarle datos interminables que causan un error de falta de memoria. Si necesita un manejo personalizado, debe escribir el código usted mismo. –

+0

@grom Puedes usar Read() en tu propio ciclo while. Ese método solo lee un caracter. Si lo combina con el tiempo de espera, debería poder hacer lo que quiera. No es lo mismo que "escribir el código usted mismo" :) –

Cuestiones relacionadas