TomaSs no te preocupes que si doy con la forma de conseguirlo lo compartiré por aquí pero por ahora no tengas mucha confianza en mi, llevo todo el día metiendole mano a este tema y no tengo forma de sacarlo.
kub0x que suerte que ya hayas pasado por este tipo de problemas, jaja lo que daría por estar en tu lugar, y esa solución que comentas, cuando no te queda otra hay que ir a por lo básico
Aver os cuento,...Esto de la serialización es peor de lo que pensaba aunque eso ya lo imaginaba de antes.
Hasta ahora lo que he echo ha sido serializar un objeto y pasarlo a través de un networkstream. El caso es que creo que lo he conseguido pero en el momento que el cliente lo envia(serializa) y el server lo recibe(deserializa), el server se queda pillado, no reacciona pero el cliente si.
Me he basado de este ejemplo
SerializarIPEndPoint ipe
= new IPEndPoint
(IPAddress
.Parse("127.0.0.1"),
5000);NetworkStream net
= new NetworkStream
(new Socket
(ipe
.AddressFamily, SocketType
.Stream, ProtocolType
.Tcp));BinaryFormatter bf
= new BinaryFormatter
();Bitmap bmp
= new Bitmap
(@"C:\imagen.gif");bf.Serialize(net, bmp);
net.Close();
En el destino Deserializas el objeto:BinaryFormatter bf
= new BinaryFormatter
();Bitmap bmp;
bmp = (Bitmap)bf.Deserialize(net);
net.Close();
-----------------------------------------------------------------------------------------------------------------------
En este pequeño ejemplo se demuestra lo que quiero conseguir pero en el proyecto no me funciona :/
Socket sC
= new Socket
(AddressFamily
.InterNetwork, SocketType
.Stream, ProtocolType
.Tcp); IPEndPoint ipC
= new IPEndPoint
(IPAddress
.Parse ("127.0.0.1"),
6000);
int[] tableroJ1
= new int[5]; tableroJ1[0] = 2;
tableroJ1[1] = 5;
NetworkStream net
= new NetworkStream
(sC
); BinaryFormatter bf
= new BinaryFormatter
();
try{
bf.Serialize(net, tableroJ1);
}catch (SerializationException e){
Console.WriteLine("Failed to serialize. Reason: " + e.Message);
throw;
}finally{
net.Close();
}
Socket sC
= new Socket
(AddressFamily
.InterNetwork, SocketType
.Stream, ProtocolType
.Tcp); IPEndPoint ipC
= new IPEndPoint
(IPAddress
.Parse ("127.0.0.1"),
6000);
int[] tableroJ1
= new int[5]; tableroJ1[0] = 2;
tableroJ1[1] = 5;
NetworkStream net
= new NetworkStream
(sC
); BinaryFormatter bf
= new BinaryFormatter
();
try{
bf.Serialize(net, tableroJ1);
}catch (SerializationException e){
Console.WriteLine("Failed to serialize. Reason: " + e.Message);
throw;
}finally{
net.Close();
}
Console.WriteLine("Pos 0 --> "+tableroJ1[0]); // Mostrara un 2
Console.WriteLine("Pos 1 --> "+tableroJ1[1]); // Mostrara un 5
También he leido por ahí que existe una clase remoting que podría hacer algo similar, no se si ayudaría a conseguir pasar un array por sockets...mira que es difícil