1

我是 C# 中的股票新手,我希望在 C# 中发送一个对象。一直在使用 BinaryWriter 发送数据(适用于字符串),但它似乎没有类似的方法

writer.Writer(new SerliaizedObject());

我们如何使用 BinaryReader/BinaryWriter 实现这一点

更新: 我使用以下函数将对象转换为字节并将其发送给客户端

 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");
   }

但读者似乎没有工作,有什么想法吗?

4

2 回答 2

2

用于BinaryFormatter将可序列化对象以二进制格式写入流:

FileStream fs = new FileStream("DataFile.dat", FileMode.Create);
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(fs, mySerializable);
于 2012-06-17T05:21:32.260 回答
0

您应该使用前 4 个字节作为长度标头,并在接收循环中添加一个变量 bytesReadSoFar。然后你就知道什么时候收到了。

于 2012-06-17T07:34:47.633 回答