Foro de elhacker.net

Programación => 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
  1. private boolean iniciarConectividad(){
  2.        ServerSocket ss;
  3.        //Iniciando servidor...
  4.        try {
  5.            ss = new ServerSocket(10579);
  6.            System.out.println("Iniciando servidor");
  7.            //Servidor iniciado exitosamente...
  8.            //Esto lo mantiene en eterna escucha...
  9.            while (true) {
  10.                Socket socket = null;
  11.                try {
  12.                    socket = ss.accept(); //--> JUSTO AQUI    "S E  C U E L G A"
  13.                    System.out.println("Nueva conexión entrante: " + socket);
  14.                    ((Hilos) new Hilos(socket, Sesion.idSesionServidor)).start();
  15.                    Sesion.idSesionServidor++;
  16.                    System.out.println("Esperando una nueva solicitud de conexión...");
  17.                    return true;
  18.                } catch (IOException e) {
  19.                    e.printStackTrace();
  20.                    return false;
  21.                }
  22.            }
  23.        } catch (IOException ex) { Logger.getLogger(Servidor.class.getName()).log(Level.SEVERE, null, ex);
  24.            //Se produjo un error al intentar iniciar el servidor...
  25.            System.out.println("Se produjo un error al intentar iniciar el servidor...");
  26.            return false;
  27.        }
  28.    }
  29.  

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.  

Código:

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...