Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/11/2010, 23:34
Mosazu
 
Fecha de Ingreso: abril-2010
Mensajes: 31
Antigüedad: 14 años, 8 meses
Puntos: 1
¿Pasar objetos por sockets?

Necesito ayuda para pasar un objeto por medio de sockets. Estoy haciendo una aplicación cliente servidor, y necesito enviar un objeto de un lado a otro usando sockets, esto ya lo he hecho en java, pero es mi primera vez usando sockets en c# y como es de esperar, estoy teniendo problemas con eso.

Este es el código del servidor:

Código c#:
Ver original
  1. public void enviar()
  2.         {
  3.             try
  4.             {
  5.                 //Hago la coneccion al socket, todo perfecto hasta aqui
  6.  
  7.                  //Creo el objeto para enviar
  8.                 Persona p = new Persona(12345, "Juan Perez", "22222222");
  9.  
  10.                 NetworkStream tream = new NetworkStream(socket);
  11.                 StreamReader reader = new StreamReader(stream);
  12.                 StreamWriter writer = new StreamWriter(stream);
  13.                 BinaryFormatter bf = new BinaryFormatter();
  14.  
  15.                 Console.WriteLine("Sending data to server...");
  16.                
  17.                 bf.Serialize(stream, p);
  18.  
  19.                 //Leo la respuesta del servidor
  20.                
  21.                 //Cierro los stream y sockets
  22.  
  23.             }
  24.             catch (Exception ex)
  25.             {
  26.                 Console.WriteLine("An error has ocurred while connecting to the server.");
  27.             }
  28.         }

Y aquí el código del servidor:

Código c#:
Ver original
  1. public void recibir()
  2.         {
  3.             try
  4.             {
  5.                 //Establezco la conexion con el cliente.
  6.  
  7.                 while (true)
  8.                 {
  9.                     //Acepto la conexion, hasta aqui todo perfecto.
  10.  
  11.                     NetworkStream stream = new NetworkStream(socket);
  12.                     StreamReader reader = new StreamReader(stream);
  13.                     StreamWriter writer = new StreamWriter(stream);
  14.                     BinaryFormatter bf = new BinaryFormatter();
  15.  
  16.                     Console.WriteLine("Reading client data");
  17.                     Persona p = (Persona)(bf.Deserialize(stream));
  18.  
  19.                    //Envio la respuesta al cliente
  20.  
  21.                    //Cierro los stream y sockets
  22.                 }
  23.             }
  24.             catch (Exception ex)
  25.             {
  26.                 Console.WriteLine("An error has ocurred while executing the server.");
  27.             }
  28.         }

El problema es que del lado del sevidor, me genera una excepcion (System.Runtime.Serialization.SerializationExcepti on) cuando intento deserializar el objeto ¨Persona¨.

Cabe mencionar que la clase Persona está marcada como serializable, así que dudo que sea por eso.

Si alguien sabe como resolver esto, agradezco mucho su ayuda.