Controlar TimeOut en conexión

Iniciado por imaginawireless, 19 Febrero 2012, 02:09 AM

0 Miembros y 1 Visitante están viendo este tema.

imaginawireless

Hola gente. A ver si alguine puede echarme un cable. Tengo este código para comprobar la respuesta http de una URL...

Citarpublic 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.

RyogiShiki

#1
Necesitas abrir la conexión a través de URLConnection[Ejemplos] Y usar el método setConnectTimeout()

Saludos


imaginawireless

#2
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.

Citarpublic 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;
        }
    }

imaginawireless

Vale chicos, la cosa quedó así y funciona perfectamente.

Gracias "RyogiShiki"

Citarpublic 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;
            }
    }

RyogiShiki

Bien, me alegra que te haya servido.

Saludos