elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Read timeout
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Read timeout  (Leído 2,352 veces)
Xedrox

Desconectado Desconectado

Mensajes: 274



Ver Perfil
Read timeout
« en: 28 Agosto 2014, 19:36 pm »

Hola gente , como os va?

   Les hago una consultonta, resulta ser que tengo un programa "Java" que se conecta como cliente (usando la clase Socket) a otro programa. Para leer un mensaje, uso la clase "DataInputStream", el metodo (int read(bytes[])". Resulta ser que muchas veces me conecto a este programa satisfactoriamente, pero a veces no me contesta y me quedo en un "read" eterno, conoces alguna manera de ponerle un timeout a ese read?

Muchas Gracias
Saludos!


En línea

0vatsug

Desconectado Desconectado

Mensajes: 8


Programmer Attempt


Ver Perfil
Re: Read timeout
« Respuesta #1 en: 29 Agosto 2014, 01:03 am »

El método connect de la clase Socket acepta un timeout como segundo parámetro. Ejemplo:

Código
  1. public void createConnection() throws UnknownHostException, IOException {
  2. try {
  3.  
  4. InetAddress addr = InetAddress.getByName("localhost");
  5. int port = 80;
  6.  
  7. SocketAddress sockaddr = new InetSocketAddress(addr, port);
  8.  
  9. // Crea un socket
  10. Socket socket = new Socket();
  11.  
  12. int timeout = 5000;   // medida en milisegundos = 5 seg.
  13.  
  14. /* Conecta el socket con el servidor con un timempo limite especifico (5s)
  15.   Si llega el tiempo limite, una SocketTimeoutException sera lanzada */
  16. socket.connect(sockaddr, timeout);
  17.  
  18. System.out.println("Socket connected..." + socket);
  19.  
  20. }
  21. throw new UnknownHostException("Error: Host desconocido"+e.getMessage());
  22. }
  23. catch (IOException ioe) {
  24. throw new IOException("Error en el flujo de comunicacion "+ioe.getMessage());
  25. }
  26.  
  27. }

Capturando las excepciones lanzadas puedes manejar la lógica de tu aplicación para que no se quede congelada y puedas volver a intentar conectarte. Lo que tienes que mirar es por qué razón esas veces no conecta.

Bendiciones.


« Última modificación: 29 Agosto 2014, 01:05 am por 0vatsug » En línea

Chuidiang

Desconectado Desconectado

Mensajes: 161



Ver Perfil WWW
Re: Read timeout
« Respuesta #2 en: 5 Septiembre 2014, 20:45 pm »

Hola:

El timeout de connect es para la conexión, no afecta a los read.
Para el read(), llama a

socket.setSoTimeout( timeout en milisegundos)

Basta llamar a este método una sola vez, no es necesario hacerlo en cada read.

Te saltará una excepción java.net.SocketTimeoutException si salta el timeout en el read.

Se bueno.
« Última modificación: 5 Septiembre 2014, 20:47 pm por Chuidiang » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Servlet (Connection Timeout)
Java
BlaineMonkey 4 5,507 Último mensaje 17 Junio 2010, 10:32 am
por BlaineMonkey
Timeout en mètodo connect de SocketChannel
Java
RyogiShiki 0 2,407 Último mensaje 16 Agosto 2011, 04:28 am
por RyogiShiki
Controlar TimeOut en conexión
Java
imaginawireless 4 6,033 Último mensaje 23 Febrero 2012, 04:41 am
por RyogiShiki
Busqueda con resultados en blanco(timeout)
PHP
RubenLL 3 1,980 Último mensaje 5 Noviembre 2012, 13:08 pm
por RubenLL
Controlar Timeout mediante un EJB « 1 2 »
Java
routerico 12 6,460 Último mensaje 2 Febrero 2015, 21:04 pm
por Usuario Invitado
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines