[AYUDA] Escuchador para programa con Socker

Iniciado por Xephiro, 8 Octubre 2008, 18:40 PM

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

Xephiro

Hola, quisiera saber como se puede hacer un Escuchador o Listener para un programa en java que resive datos por medio de un sochet, usando hebras cree lo siguiente


Metodo run:


public void run(){
   
    while(socket.isConnected()){

    try{
   
    ObjectInputStream buffer = new ObjectInputStream (socket.getInputStream());
    SocketData dato = (SocketData) buffer.readObject();
   
    System.out.println(dato);
   
    }catch (Exception e){
   
    e.printStackTrace();
   
    }
   
    }



Pero, pasa que al estar conectado y no recivir datos, el programa arroja errores...

Existe alguna forma de que solo actue cuando detecte que se esta enviando algun dato ¿?

Casidiablo

Qué error te aparece? Puede ser porque estás imprimiendo los datos sin ni siquiera verificar si en realidad existen. Además te recomiendo que envíes y recibas objetos específicos, por ejemplo una cadena String. Tienes un ejemplo sencillo aquí:

http://casidiablo.net/java-socket-chat-basico/

Un saludo!

Xephiro

mmm el ejemplo ya habia visto algo parecido antes, pero pasa que esos ejemplo

Conectan reciven un dato sabiendo que se esta enviando algo del cliente, luego cierran la conexion


lo que yo quiero es mientras se hacen otras operaciones, el servidor este constantemente escuchando si llega algo, pero el problema que si lo hago tal como puse el metodo de arriba, como el cliente no envia nada el server trata de pescar algo que no existe y se cae.


El error es el siguiente:
java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(SocketInputStream.java:168)
    at java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java:2266)
    at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2279)
    at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2750)
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:780)
    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:280)
    at NetConect.Listener.run(Listener.java:22)




juancho77

Me suena a que se debe a que cuando lee no identifica el objeto que estas leyendo. El objeto socket lee del buffer de entrada solo cuando hay algo que leer. Es como un BufferedReader tradicional de consola: se quedare esperando hasta que ingreses algo, y luego si ingresas un dato no valido y no lo puedo castear, entonces arroja error. Esto es igual.