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

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Comprobar conexion en Java (ping)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Comprobar conexion en Java (ping)  (Leído 12,142 veces)
juancaa

Desconectado Desconectado

Mensajes: 140


[ Img^(Img) = Real ]


Ver Perfil
Comprobar conexion en Java (ping)
« en: 9 Julio 2012, 11:07 am »

Buenas! Estoy desarrollando una pequeña aplicacion que entre otras cosas comprueba el estado de la conexion, lo mas sencillo que se me ocurre es realizar un ping a "www.google.com" pero por lo visto java no realiza pings, por lo que recurri al metodo "isReachable()" pero este, por lo que parece tansolo es capaz de encontrar el host dentro de una red local, no en la red externa.

Este es el codigo que actualmente estoy utilizando:
Código
  1.        String conStatus = null;
  2.        try {
  3.            int timeOut = 2000;
  4.            String host= "http://www.google.es/";
  5.            InetAddress address = InetAddress.getByName(host);
  6.            if (address.isReachable(timeOut))
  7.                conStatus = "Online";
  8.            else conStatus = "Still Offline";
  9.        } catch (Exception e) { }
  10.        return conStatus;
  11.  

Y tal como he dicho, no funciona para redes externas con lo que no se como hallar el estado de la conexion. Alguna idea??
Gracias de antemano!!


En línea

Que tengas un buen dia!
adastra
Endless Learner
Ex-Staff
*
Desconectado Desconectado

Mensajes: 885


http://thehackerway.com/


Ver Perfil WWW
Re: Comprobar conexion en Java (ping)
« Respuesta #1 en: 9 Julio 2012, 12:20 pm »

Cuando realizas conexiones HTTP/HTTPS desde Java, debes utilizas las clases HttpUrlConnection y HttpsUrlConnection, ambas son hijas de la clase URLConnection.
En esas clases, esta la clave para lo que quieres hacer.


En línea

juancaa

Desconectado Desconectado

Mensajes: 140


[ Img^(Img) = Real ]


Ver Perfil
Re: Comprobar conexion en Java (ping)
« Respuesta #2 en: 11 Julio 2012, 15:01 pm »

Esta es la solución a la que he llegado :

Código:
    private String getConnectionStatus () {
        String conStatus = null;
        try {
            URL u = new URL("https://www.google.es/");
            HttpsURLConnection huc = (HttpsURLConnection) u.openConnection();
            huc.connect();
            conStatus = "Online";
        } catch (Exception e) {
            conStatus = "Offline";
        }       
        return conStatus;
    }

Este codigo lo que hace es intentar conectar a la direccion "u" y, si es posible actualiza el valor de conStatus a "Online" y si no es posible tira una excepcion, la cual recojo y actualizo el valor de conStatus a "Offline"...

Es esta la idea ? Es optimizable el codigo ??
En línea

Que tengas un buen dia!
adastra
Endless Learner
Ex-Staff
*
Desconectado Desconectado

Mensajes: 885


http://thehackerway.com/


Ver Perfil WWW
Re: Comprobar conexion en Java (ping)
« Respuesta #3 en: 11 Julio 2012, 18:40 pm »

 jejeje, si y no.
Fijate en la excepción que se lanza cuando intentes realizar una conexión por HTTPS...
Debes implementar los métodos necesarios para tratar los los certificados que emite el servidor y definir cuales son confiables y cuales no. Si ese tratamiento no es implementado, tu programa en Java siempre te dará una excepción porque no confía en ninguno de los certificados que envía el servidor para establecer una conexión SSL.
Por otro lado, el hecho de que haya conectividad por significa que el servicio este disponible, la respuesta perfectamente puede ser un error HTTP 3XX, 4XX o 5XX, podrás garantizar que el servidor esta activo (y que tienes acceso al recurso o página que solicites) si y solo si, el código HTTP retornado por el servidor es 2XX


Esto es un fragmento de código de un proyecto que tengo en Java que establece una conexión HTTP/HTTPS, es más o menos lo que necesitas (en este caso sin validar los certificados aceptables, por defecto todos son admitidos, desde el punto de vista de la seguridad esto se puede dar para ataques MITM, así que no es código para poner en un entorno productivo).


Código:
[pre]if(isUseSSL()) { SSLContext sc = SSLContext.getInstance("SSL"); sc.init(null, new TrustManager[]{ new X509TrustManager() { public java.security.cert.X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; } public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) { } public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) { } } }, new java.security.SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); HttpsURLConnection.setDefaultHostnameVerifier( new HostnameVerifier() { public boolean verify(String string,SSLSession ssls) { return true; } }); setUrlService(new URL("https",getHostService(),getPortService(),pathService)); } else { setUrlService(new URL("http",getHostService(),getPortService(),pathService)); } if(getUrlService() != null) { setUrlConnection(getUrlService().openConnection()); } if(getUrlConnection() != null) { getUrlConnection().setDoOutput(true); getUrlConnection().setDoInput(true); getUrlConnection().setUseCaches(false); getUrlConnection().setRequestProperty("Content-Type", contentType); getUrlConnection().setReadTimeout(5000); return true; [/pre][pre] } [/pre][pre]
[/pre][pre]
[/pre][pre]
[/pre][pre]
[/pre][pre]
[/pre][pre]
[/pre][pre][pre] /** * Getter of this property. * @return the urlConnection */ public URLConnection getUrlConnection() { return urlConnection; } /** * Setter of this property * @param urlConnection the urlConnection to set */ public void setUrlConnection(URLConnection urlConnection) { this.urlConnection = urlConnection; }[/pre][/pre]





En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Comprobar si hay ping
Scripting
arca 9 6,672 Último mensaje 28 Octubre 2008, 22:18 pm
por Enemy
Ver ID del proceso (conexion) y comprobar su estado
Bases de Datos
XafiloX 3 6,707 Último mensaje 27 Febrero 2010, 16:47 pm
por XafiloX
Comprobar la hora en java
Java
Zoik 5 3,910 Último mensaje 28 Agosto 2013, 21:58 pm
por 1mpuls0
Comprobar conexión a internet en C++?
Programación C/C++
andrecid 1 2,405 Último mensaje 17 Octubre 2015, 20:59 pm
por ThunderCls
Comprobar Conexión, ¿Activa?
Redes
dafama 5 4,207 Último mensaje 24 Julio 2019, 09:55 am
por dafama
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines