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
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.
Si escribe Java, aprender a navegar the API documentation es útil. En el caso de una lectura zócalo, puede set the timeout option.
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();
}
'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
@ooxi Eso es completamente falso. El tiempo de espera de lectura se aplica a cada lectura, no solo a la primera. – EJP
- 1. Java: ¿cómo puede esperar un hilo en varios objetos?
- 2. ¿Cómo se puede conectar y cerrar un socket?
- 3. Java: tiempo de espera de lectura de socket excepción
- 4. No se puede crear socket en Windows
- 5. ¿Se puede conectar un socket web HTML5 a un socket Java?
- 6. Apache HttpClient 4.0 no pudo esperar el socket en Android
- 7. Cómo esperar a que se presione una tecla en Clojure
- 8. ¿Cómo entender java Socket-Permissions?
- 9. ¿Cómo se maneja la desconexión de socket en Java?
- 10. usando seleccionar para esperar datos en un socket de cliente
- 11. Cómo utilizar un generador para dividir datos de lectura de socket en líneas nuevas
- 12. Lectura en Java
- 13. Cómo se puede escribir una JVM en Java
- 14. ¿Cómo se puede validar una cadena en Java?
- 15. ¿El socket Java no arroja excepciones en un socket muerto?
- 16. cómo hacer multiprocesamiento en Java, y qué velocidad espera esperar?
- 17. ¿Cómo se puede suprimir un recibo de lectura?
- 18. Cómo cancelar la lectura/escritura asíncrona sin cerrar el socket?
- 19. Java TCP Socket Sniffing
- 20. En java, cómo esperar en múltiples `Condiciones` hasta que se indique cualquiera de ellas
- 21. Lectura de un socket 1 byte un tiempo frente a lectura en un fragmento grande
- 22. ¿Cómo servir un socket desde una aplicación Java EE?
- 23. java socket/output stream escribe: ¿bloquean?
- 24. Cómo esperar en Node.js
- 25. No se puede leer desde el socket (bloqueos)
- 26. Socket - Java Client, C# Server
- 27. ¿Se puede extender ArrayList en Java?
- 28. desconectándose de un socket en java
- 29. No se puede desactivar la opción de socket IPV6_V6ONLY
- 30. Cómo crear dos interfaces para una clase de Java, una de solo lectura, una de lectura y escritura?
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
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'. –