Sockets
Hola,
Estoy haciendo una aplicación de comunicación con sockets. Soy un poco novato en el asunto y tengo una duda que me detiene y no me deja seguir programando.
El caso es que ya paso mensajes, pero con la instrucción
String line = is.readLine();
(siendo is de tipo BufferedReader)
Se me queda el programa esperando a que reciba algo. Y yo quiero que mientras no reciba nada haga otra cosa. He probado con un while mirando si es null... pero el problema es que de esa instrucción no pasa.
¿Cómo puedo hacer lo que quiero?
Gracias por adelantado por vuestra ayuda.
Un saludo.
Estoy haciendo una aplicación de comunicación con sockets. Soy un poco novato en el asunto y tengo una duda que me detiene y no me deja seguir programando.
El caso es que ya paso mensajes, pero con la instrucción
String line = is.readLine();
(siendo is de tipo BufferedReader)
Se me queda el programa esperando a que reciba algo. Y yo quiero que mientras no reciba nada haga otra cosa. He probado con un while mirando si es null... pero el problema es que de esa instrucción no pasa.
¿Cómo puedo hacer lo que quiero?
Gracias por adelantado por vuestra ayuda.
Un saludo.
Eso te ocurre porque esos sockets son bloqueantes (blocking), y no devuelven el control a tu aplicación hasta que no hay datos. Lo mejor si quieres ir haciendo cosas mientras es que tengas un thread escuchando mientras otro hace las otras tareas. El thread que escucha, cuando reciba datos, llamará a los métodos adecuados para procesarlos.
En cualquier caso, me suena que en las últimas versiones del jdk hay formas de crear sockets no bloqueantes (non-blocking). ¿Alguién por ahà que lo sepa con certeza?
En cualquier caso, me suena que en las últimas versiones del jdk hay formas de crear sockets no bloqueantes (non-blocking). ¿Alguién por ahà que lo sepa con certeza?
Gracias por tu ayuda Cubil.
De todos modos, cómo puedo hacer lo que me dices, tener un thread escuchando y el otro haciendo las tareas?
Saludos!
De todos modos, cómo puedo hacer lo que me dices, tener un thread escuchando y el otro haciendo las tareas?
Saludos!
En el hilo que quieres que esté escuchando todo el tiempo tienes que meter un bucle while(true) dentro de su método run() , para que itere continuamente. Has de tener en cuenta una cosa: Si llamas al método run desde el constructor de la propia clase, efectivamente ejecutarás el run, pero el resto de la aplicación no correrá independientemente. Cuando llames al constructror de esta clase, deberás invocar a su método start() para que entre en el run() y el resto de la aplicación no se pare. Algo asi:
Thread miHilo=new Thread().start();
Espero que te sirva
Thread miHilo=new Thread().start();
Espero que te sirva
Perdona, igual tiene que ser:
Thread miHilo=new Thread();
miHilo.start();
Thread miHilo=new Thread();
miHilo.start();
Recuerde la gran herramienta que tiene java de multihilos, si es un estream que se queda a la espera... dejela coriendo con un hilo. Thread
