2012-06-17 5 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. Тогда вы знаете, когда все будет получено.

Смежные вопросы