Sockets

Yayo
11 de Octubre del 2005
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.

cubil
11 de Octubre del 2005
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?

Yayo
11 de Octubre del 2005
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!

isma_
11 de Octubre del 2005
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

isma_
11 de Octubre del 2005
Perdona, igual tiene que ser:

Thread miHilo=new Thread();
miHilo.start();

jacgandres
11 de Octubre del 2005
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

jacgandres
11 de Octubre del 2005
FACIL LOS HILOS... IMPLEMENTE UNA CLASE ASI
class cualquiera extends Thread
{
//invoca el metodo run
public void run()
{
//pone lo que necesita que se trabaje
}
}

Y DESPUES LA INVOCA DESDE SU MAIN O DONDE QUIERA