Foro de elhacker.net

Programación => Java => Mensaje iniciado por: imaginawireless en 19 Febrero 2012, 02:09 am



Título: Controlar TimeOut en conexión
Publicado por: imaginawireless en 19 Febrero 2012, 02:09 am
Hola gente. A ver si alguine puede echarme un cable. Tengo este código para comprobar la respuesta http de una URL...

Citar
public int compRespUrl(String direcUrl) throws IOException {
                try{
                    URL url = new URL(direcUrl);
                    int responseCode = ((HttpURLConnection) url.openConnection()).getResponseCode();
                    return responseCode;
                }catch(Exception e){
                    System.out.println(e);
                    return 0;
                }

El problema es que cuando la URL no está disponible, me tarda mucho en dar Time Out. ¿Como puedo controla el tiempo máximo de conexión?

Gracias.


Título: Re: Controlar TimeOut en conexión
Publicado por: RyogiShiki en 19 Febrero 2012, 02:23 am
Necesitas abrir la conexión a través de URLConnection (http://docs.oracle.com/javase/1.5.0/docs/api/java/net/URLConnection.html)[Ejemplos (http://docs.oracle.com/javase/tutorial/networking/urls/readingWriting.html)] Y usar el método setConnectTimeout() (http://docs.oracle.com/javase/1.5.0/docs/api/java/net/URLConnection.html#setConnectTimeout%28int%29)

Saludos


Título: Re: Controlar TimeOut en conexión
Publicado por: imaginawireless en 19 Febrero 2012, 13:38 pm
Pero el problema es que con "URLConnection", no tengo  el método "getResponseCode()". He buscado en el doc, pero ne veo ningún método que me devuelva la respuesta si no es usando "HttpURLConnection".

Solo se me ocurre esto tal como me has dicho, pero me da una excepción y no encuentro como solucionarla.

Citar
public int compRespUrl(String direcUrl) throws IOException {
        try{
            URL url = new URL(direcUrl);
            int espera=3000;
            int responseCode = (((HttpURLConnection) url.openConnection()).setConnectTimeout(espera)).getResponseCode();
            return responseCode;
        }catch(Exception e){
            return 0;
        }
    }


Título: Re: Controlar TimeOut en conexión
Publicado por: imaginawireless en 21 Febrero 2012, 13:09 pm
Vale chicos, la cosa quedó así y funciona perfectamente.

Gracias "RyogiShiki"

Citar
public int compRespUrl(String direcUrl) throws IOException {
        try{
            HttpURLConnection con = (HttpURLConnection) new URL(direcUrl).openConnection();
            con.setConnectTimeout(5000); //establecemos timeout a 5 segundos
            return con.getResponseCode();

            /*tambien podemos recoger la respuesta en un String
            */return (con.getResponseCode() == HttpURLConnection.HTTP_OK);
           
            }catch (java.net.SocketTimeoutException e){
                System.out.println(e);
                return 0;
            }catch (java.io.IOException i){
                System.out.println(i);
               return 0;
            }
    }


Título: Re: Controlar TimeOut en conexión
Publicado por: RyogiShiki en 23 Febrero 2012, 04:41 am
Bien, me alegra que te haya servido.

Saludos