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

You should use the first 4 bytes as length header, and in the receive loop you add a variable bytesReadSoFar. Then you know when everything is received.

于 2012-06-17T07:34:47.633 に答える