Foros del Web » Programación para mayores de 30 ;) » Java »

Problema con ObjectOutputStream

Estas en el tema de Problema con ObjectOutputStream en el foro de Java en Foros del Web. Tengo un problema con una aplicacion que estoy haciendo El problema esta en una parte muy basica, inicio un serversocket, acepta un cliente, ya tengo ...
  #1 (permalink)  
Antiguo 04/09/2009, 07:53
 
Fecha de Ingreso: mayo-2009
Mensajes: 3
Antigüedad: 15 años
Puntos: 0
Problema con ObjectOutputStream

Tengo un problema con una aplicacion que estoy haciendo
El problema esta en una parte muy basica, inicio un serversocket, acepta un cliente, ya tengo un socket uniendo cliente y servidor, ahora el problema viene con la linea de codigo siguiente:

ObjectInputStream entraobjeto = new ObjectInputStream(socket.getInputStream());

si hago eso mismo pero con un DataInputStream, funciona perfectamente, pero si hago eso, el programa simplemente se para en esa linea y no continua la ejecucion.

Lo curioso es que eso pasa en una sola direccion, el OutputStream puedo hacerlo de Object y no pasa nada y en el lado del cliente no hay problema de ningun tipo, solo me pasa en el servidor y se queda pillado, alguna pista de porque puede ser?

Muchas gracias

Última edición por Thanar; 04/09/2009 a las 10:45
  #2 (permalink)  
Antiguo 04/09/2009, 10:44
 
Fecha de Ingreso: mayo-2009
Mensajes: 3
Antigüedad: 15 años
Puntos: 0
Respuesta: Problema con ObjectOutputStream

Hola, ha surgido un nuevo giro imprevisto al problema, al hacer:

ObjectInputStream entraobjeto = new ObjectInputStream(socket.getInputStream());
ObjectOutputStream salobjeto = new ObjectOutputStream(socket.getInputStream());

el programa se queda pillado, y no funciona (no recuerdo ahora en cual de las dos lineas se para , lo ponder si lo considerais necesario) ahora bien, si las pongo al reves:

ObjectOutputStream salobjeto = new ObjectOutputStream(socket.getInputStream());
ObjectInputStream entraobjeto = new ObjectInputStream(socket.getInputStream());

el programa funciona correctamente, pero ahora (aunque sin dar ningun fallo ni quedarse pillado) no funciona el flujo de entrada (no se si es el cliente que no envia, pero antes enviaba correctamente, o el servidor que no recibe) Y no se porque puede ser, pero no hay manera, no recibe nada, se queda esperando la entrada de datos, y el cliente no los envia...

alguna pista?

Gracias
  #3 (permalink)  
Antiguo 04/09/2009, 15:19
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: Problema con ObjectOutputStream

Hola:

En el segundo post que pones, ¿estás poniendo socket.getInputStream() en ambos?. Supongo que el getInputStream debe ir para el ObjectInputStream y el getOutputStream() debería ir con el ObjectOutputStream. Eso puede explicar que no puedas escribir.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #4 (permalink)  
Antiguo 05/09/2009, 17:31
 
Fecha de Ingreso: mayo-2009
Mensajes: 3
Antigüedad: 15 años
Puntos: 0
Respuesta: Problema con ObjectOutputStream

Lo siento, ha sido error al transcribir el codigo, hago aqui un copy-paste:

ObjectOutputStream sal;
DataInputStream ent;

public void start(){
ServerSocket socket = new ServerSocket (7333);
Socket c = socket.accept();

System.out.println("Cliente Conectado");
socket.close();


sal = new ObjectOutputStream(c.getOutputStream());
sal.flush();
ent = new DataInputStream(c.getInputStream());


(...)
}

esto funciona, pero si cambio en DataInputStream por ObjectInputStream (cambio Data por Object) no funciona, no pasa de esa linea de codigo
  #5 (permalink)  
Antiguo 06/09/2009, 05:54
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: Problema con ObjectOutputStream

Hola:

Cuando se usa ObjectOutputStream, esta clase automáticamente envía una cabecera de bytes cuando escribes el primer objeto con writeObject(). Ya no envía dicha cabecera después.

Por su lado, el constructor de ObjectInputStream se queda bloqueado a la espera de esa cabecera. Por ello, esa línea se queda bloqueada hasta que el cliente en el otro lado escriba su primer Objeto en el socket con su ObjectOutputStream. (echa un ojo a la API del constructor de ObjectInputStream).

Lo normal para que un servidor atienda clientes es crear un hilo para la lectura del socket (creación del ObjectInputStream en tu caso y siguientes lecturas), ya que estas lecturas suelen quedarse bloqueadas hasta que llega algo.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:27.