¿Qué ocurre con el socket? se congela la aplicación

Iniciado por miltonprogramador, 23 Diciembre 2016, 00:48 AM

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

miltonprogramador

Hola amigos... hoy traigo una falla con el manejo de socket... tengo un método para iniciar la conectividad del socket en una aplicación cliente servidor pero cuando llega a ss.accept(); la aplicación simplemente se cuelga... se nota colgada porque no responde a ninguno de los controles en la vista e incluso el botón que tengo creado para iniciar la conectividad se queda presionado... entonces si esta colgada...

el método que uso para la conectividad es el siguiente:

Código (java) [Seleccionar]

private boolean iniciarConectividad(){
        ServerSocket ss;
        //Iniciando servidor...
        try {
            ss = new ServerSocket(10579);
            System.out.println("Iniciando servidor");
            //Servidor iniciado exitosamente...
            //Esto lo mantiene en eterna escucha...
            while (true) {
                Socket socket = null;
                try {
                    socket = ss.accept(); //--> JUSTO AQUI    "S E  C U E L G A"
                    System.out.println("Nueva conexión entrante: " + socket);
                    ((Hilos) new Hilos(socket, Sesion.idSesionServidor)).start();
                    Sesion.idSesionServidor++;
                    System.out.println("Esperando una nueva solicitud de conexión...");
                    return true;
                } catch (IOException e) {
                    e.printStackTrace();
                    return false;
                }
            }
        } catch (IOException ex) { Logger.getLogger(Servidor.class.getName()).log(Level.SEVERE, null, ex);
            //Se produjo un error al intentar iniciar el servidor...
            System.out.println("Se produjo un error al intentar iniciar el servidor...");
            return false;
        }
    }


Agradezco su ayuda... tengo todo el día tratando de darle la vuelta pero no encuentro el detalle...
Aprendiendo de los mejores se llega a ser uno de ellos...

Dougki

#1
hola, se queda colgada porque el metodo accept detiene el hilo hasta que llega una peticion y entonces la acepta, la solucion para que no se cuelgue la aplicacion seria crear una nueva clase que implemente Runnable , que cree un nuevo hilo y que en esta se cree serversocket y se quede a la escuha de la peticion.  



public class escucha implements Runnable{

public escucha(){

Thread hilo=new Thread(this);
hilo.start();

}

public void run() {

try {

ServerSocket ss=new ServerSocket(7777);
Socket s=ss.accept();

ss.close();
s.close();


} catch (IOException e1) {
e1.printStackTrace();
}

}

}



miltonprogramador

Gracias por responder, es verdad es my obvio... lo resolví el mismo día que me hiciste la sugerencia... opté por un Thread.... Muchas gracias...
Aprendiendo de los mejores se llega a ser uno de ellos...