Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - leinier04

#1
Java / Detectar desconexión de socket?
23 Agosto 2011, 17:37 PM
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.


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.

 
      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.