Ver Mensaje Individual
  #1 (permalink)  
Antiguo 23/08/2011, 08:02
leinier04
 
Fecha de Ingreso: septiembre-2010
Mensajes: 20
Antigüedad: 13 años, 7 meses
Puntos: 2
Detectar desconexión de socket?

Buenas,
Estoy empezando a trabajar con socket y a lo mejor es un poco básica mi pregunta pero no logro ver que problema tengo, Estoy conectándome a un servidor que me manda datos constantemente, me conecto sin problemas y proceso los datos pero haciendo pruebas quito el cable de red en el cliente y la aplicación no me lanza ninguna Exception y sin embargo la aplicación me sigue recibiendo datos no se en donde se me quedan y como resolver el problema.
Ahora un poco de mi código para que vean que es lo que hago para conectarme ect.

Código:
private NSocket (String peerhost, int peerport) {
        this.host = peerhost;    //for storing purposes
        this.port = peerport;
        try {
            socket = new Socket();
            socket.setReceiveBufferSize(100); /*Esto lo hago como prueba de reducir el tamaño del buffer del socket para que no me siga tomando datos luego de quitado el cable de red y me lance una Exception pero nada.*/
            socket.setSoTimeout(15000); //El timeout en 15s
            SocketAddress socketAddress = new InetSocketAddress(InetAddress.getByName(peerhost), port);
            socket.connect(socketAddress);
            out = new PrintWriter(socket.getOutputStream(), true);
            in = new BufferedReader(new InputStreamReader(socket.getInputStream(), "ISO-8859-1"), 100); //Es el buffer del cual leo los datos también le pongo un size máximo de 100 tratando de resolver el problema. Pero nada
        } catch (UnknownHostException execpt) {
  execpt.printStackTrace();
        } catch (IOException execpt) {
  execpt.printStackTrace();
        }
Ahora un poco de código de cómo proceso los datos Este código esta dentro de un Hilo diferente a la aplicación.

Código:
public void run() {

            while (continuar) { // Continuar estara siempre en true para que siempre este pidiendo datos 
                try {
                    cbuf = new char[100];// Arreglo para almacenar los datos que leo
                    while ((in.read(cbuf, 0, 100)) != -1) {// in fue declarado en el constructor de la clase leo 100 datos del buffer
                        if (!socket.isConnected()){// compruebo que este conectado el socket
                            System.out.println("Exception"); 
                            throw new Exception("Can't find host " + host);
                        }
                        temp = new String(cbuf);
		//Proceso los datos
                    }
                } catch (IOException execpt) {
                    JOptionPane.showMessageDialog(null, "Desconectado Aparato");
	      throw new Exception("Can't find host " + host);
                }
            }
        }
Bueno espero que me puedan ayudar y de ante manos gracias por su tiempo.
Saludos.