2012-06-17 151 views
1

我是C#中的股票新手,我希望在C#中发送一个对象。已经使用的BinaryWriter发送数据(工作正常的字符串),但它似乎并不具有像通过套接字发送对象

writer.Writer(new SerliaizedObject()); 

的方法,我们是如何实现这一使用BinaryReader在/的BinaryWriter

UPDATE: 我用下面的函数通过对象转换为字节,跨发送到客户端

public static byte[] SerializeToBytes<T>(T item) 
     { 
      var formatter = new BinaryFormatter(); 
      using (var stream = new MemoryStream()) 
      { 
       formatter.Serialize(stream, item); 
       stream.Seek(0, SeekOrigin.Begin); 
       return stream.ToArray(); 
      } 
     } 

     public static object DeserializeFromBytes(byte[] bytes) 
     { 
      var formatter = new BinaryFormatter(); 
      using (var stream = new MemoryStream(bytes)) 
      { 
       return formatter.Deserialize(stream); 
      } 
     } 

发送数据时:

formatter = new BinaryFormatter(); 
    MessageBox.Show(SerializeToBytes<mydata>(new mydata()).Length+""); 
    writer.Write(SerializeToBytes<mydata>(new mydata())); 
    ChatBox.AppendText("Client Says :" + UserMessage.Text + "\r\n"); 

,并阅读我所使用的数据:

while (true) 
    { 
     byte[] bytes = reader.ReadBytes(120); 
     mydata temp = DeserializeFromBytes(bytes) as mydata; 
     ChatBox.AppendText("Server Says " + temp + "\r\n"); 
    } 

但是读者似乎并不工作,任何想法?

+0

序列化对象到一个字节数组并写入? –

+0

在转换为数组之前,您不需要查找流的开头。 – dasblinkenlight

回答

2

使用BinaryFormatter写序列化对象以流二进制格式:

FileStream fs = new FileStream("DataFile.dat", FileMode.Create); 
BinaryFormatter formatter = new BinaryFormatter(); 
formatter.Serialize(fs, mySerializable); 
+0

感谢您的帮助,只是更新了帖子 – Akash

0

您应该使用第4个字节长度的头,并在收到环你添加一个变量bytesReadSoFar。然后你知道什么时候收到了一切。

相关问题