Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Desconectar Socket (Cliente)

Estas en el tema de Desconectar Socket (Cliente) en el foro de Java en Foros del Web. Buenas Ok Tengo un problemon, y es cuando conecto un cliente y por alguna razón se pierde la conexión ej: Desconecta el Cable, necesito saber ...
  #1 (permalink)  
Antiguo 23/01/2013, 23:26
 
Fecha de Ingreso: marzo-2010
Mensajes: 58
Antigüedad: 14 años, 1 mes
Puntos: 1
Pregunta Desconectar Socket (Cliente)

Buenas

Ok Tengo un problemon, y es cuando conecto un cliente y por alguna razón se pierde la conexión ej: Desconecta el Cable, necesito saber para iniciar una desconexión,


no se como enterarme que se a perdido la conexión y para completar, cuando hago la prueba de desconectar el cable mientras estoy conectado al socket, la aplicacion se dispara en el "Uso de la CPU" estoy casi seguro que es por el Thread();
y la unica manera de terminarlo es cerrando la aplicacion

Aqui dejo mi codigo (Cliente)


Código Java:
Ver original
  1. private void iniciarCliente() {
  2.         try {
  3.             s = new Socket(host, puerto);
  4.             s.setKeepAlive(true);
  5.             br = new BufferedReader(new InputStreamReader(s.getInputStream(), "UTF-8"));
  6.             bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream(), "UTF-8"));
  7.             hilo = new Thread(this);
  8.             hilo.start();
  9.             enLinea = true;
  10.         } catch (Exception e) {
  11.             // mensaje de error en el intento de conexion
  12.         }
  13.     }
  14.  
  15.  
  16. @Override
  17.     public void run() {
  18.         while (enLinea) {
  19.             try {
  20.                 System.out.println(br.readLine());
  21.             } catch (Exception h) {
  22.             }
  23.         }
  24.     }
  #2 (permalink)  
Antiguo 24/01/2013, 04:51
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: Desconectar Socket (Cliente)

Bueno, ¿por qué ignoras la excepción de readLine()?. Si hay una desconexión, posiblemnte te salte ahí ¿no?

De hecho, si desconectas el cable, salta la excepción y sin hacer abosolutamente nada y de forma inemediata te metes en el readLine otra vez que te hara saltar inmediatamente otra excepción que te meterás inmediatamente en el readLine.... y te comerás la CPU.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 24/01/2013, 13:10
 
Fecha de Ingreso: marzo-2010
Mensajes: 58
Antigüedad: 14 años, 1 mes
Puntos: 1
Respuesta: Desconectar Socket (Cliente)

bueno al fin termine solucionandolo

el problema estaba en el Thread..
Termine por hacer una prueba de conexion (hacia www.google.com)
y recibiendo la excepción como dice chauidiang

al final ya no me consume cpu y cierra el cliente si hay problemas en la red


hay la solución


Código java:
Ver original
  1. @Override
  2.     public void run() {
  3.        
  4.         while (enLinea) {
  5.             try {
  6.                 if (!estadoDeLaConexion()) {  //estadoDeLaConexion lo que hace es hacer una conexion a google.com
  7.                        cerrarCliente();
  8.                        break;
  9.             }
  10.                 else {
  11.                      mensajeria(br.readLine());
  12.             }
  13.             } catch (Exception h) {
  14.                 cerrarCliente();
  15.                 break;
  16.             }
  17.         }
  18.     }

Etiquetas: socket
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:38.