2010-08-25 7 views
15

Estoy tratando de leer elementos de un socket y me doy cuenta de que si no hay nada en la secuencia del socket permanecerá en la lectura y la copia de seguridad de mi aplicación. Quería saber si había una manera de establecer un tiempo de espera de lectura o terminar la conexión después de una cierta cantidad de tiempo de nada en el socket.¿Cómo se puede esperar una lectura en Java Socket?

Respuesta

-6

Sí, debería haber una anulación de Read() que acepta un valor de tiempo de espera excedido. Al 'anular' no estoy sugiriendo que alguien escriba, estoy señalando que una de las anulaciones de los métodos de socket que está usando toma un valor de tiempo de espera.

+0

Y no lee directamente desde un socket de todos modos, obtiene un 'InputStream' del socket y luego lee de eso. Haz lo que @erikson dice, usa 'setSoTimeout()'. – krock

+4

no, no debería. Eso haría que la API 'SocketInputStream' sea diferente de otras transmisiones. Ya hay una manera de hacer esto que no rompa la sustituibilidad de 'InputStream'. –

0

Si esta toma fue creado a través de un URLConnection para realizar una petición de web, se puede establecer la lectura y conectar los tiempos de espera directamente en la URLConnection antes de leer la corriente:

InputStream createInputStreamForUriString(String uriString) throws IOException, URISyntaxException { 
    URLConnection in = new URL(uriString).openConnection(); 
    in.setConnectTimeout(5000); 
    in.setReadTimeout(5000); 
    in.setAllowUserInteraction(false); 
    in.setDoInput(true); 
    in.setDoOutput(false); 
    return in.getInputStream(); 
} 
+0

'setReadTimeout' solo causará una excepción, si el tiempo de espera transcurre * antes * de que se reciban los primeros datos. Después de que se reciben los primeros datos, no se producirá ninguna excepción de tiempo de espera incluso si la conexión se cuelga infinitamente. – ooxi

+0

@ooxi Eso es completamente falso. El tiempo de espera de lectura se aplica a cada lectura, no solo a la primera. – EJP

Cuestiones relacionadas