Test Foro de elhacker.net SMF 2.1

Programación => Programación General => Java => Mensaje iniciado por: miltonprogramador en 23 Diciembre 2016, 00:48 AM

Título: ¿Qué ocurre con el socket? se congela la aplicación
Publicado por: miltonprogramador en 23 Diciembre 2016, 00:48 AM
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...
Título: Re: ¿Qué ocurre con el socket? se congela la aplicación
Publicado por: Dougki en 23 Diciembre 2016, 12:16 PM
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();
}

}

}

Título: Re: ¿Qué ocurre con el socket? se congela la aplicación
Publicado por: ivancea96 en 23 Diciembre 2016, 13:12 PM
O ponle un timeout: https://docs.oracle.com/javase/7/docs/api/java/net/ServerSocket.html#setSoTimeout(int) (https://docs.oracle.com/javase/7/docs/api/java/net/ServerSocket.html#setSoTimeout(int))
Título: Re: ¿Qué ocurre con el socket? se congela la aplicación
Publicado por: miltonprogramador en 30 Diciembre 2016, 05:05 AM
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...