.NET 2.x Ошибка при десериализации - C#
Формулировка задачи:
Привожу код сериализации и отправки объекта:
И приема с дессериализацией:
ошибка постоянно появляется на последней строчке ( на строчке return-a)
Код ошибки:
Двоичный поток "170" не содержит допустимого двоичного заголовка BinaryHeader. Возможные причины: недопустимый поток или изменение версии объекта между сериализацией и десериализацией.
При чем при нажатии continue в дебаг меню, цифра 175 меняется на 165, 165 на 124, а после еще одного continue такая ошибка вылазит:
Недопустимый двоичный формат входного потока. Начало содержимого (в байтах): 94-AA-7A-9F-22-62-B5-71-E3-46-72-F6-60-3B-B9-78-6E ...
public void SendRezult(object rezult) { using (MemoryStream reader =new MemoryStream()) { BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(reader, rezult); long send = 0L, length = reader.Length; _client.Send(BitConverter.GetBytes(length)); byte[] buffer = new byte[BufferSize]; int read, sent; reader.Position = 0; while ((read = reader.Read(buffer, 0, BufferSize)) != 0) { sent = 0; while ((sent += _client.Send(buffer, sent, read, SocketFlags.None)) < read) { send += (long)sent; //Console.WriteLine (" Sent + send + " " /" + length + "."); / / progress } } } }
public object ReceiveAnswer() { byte[] receivedBuffer = null; byte[] buffer = new byte[BufferSize]; _client.Receive(buffer); long receive = 0L, length = BitConverter.ToInt64 (buffer, 0); int received; while (receive < length) { received = _client.Receive (buffer); receivedBuffer = ConcatenateArrays(receivedBuffer, buffer); receive += (long) received; } MemoryStream ms = new MemoryStream(receivedBuffer); ms.Position = 0; return (object)new BinaryFormatter().Deserialize(ms); } //Ниже привожу код с помощью которого конкатинирую масссивы, хотя //врятли сдесь трабла byte[] ConcatenateArrays(byte[] Arr1, byte[] Arr2) { if (Arr1 == null&&Arr2!=null) return Arr2; else if (Arr2 == null) return Arr1; else { byte[] Rezult = new byte[Arr1.Length + Arr2.Length]; Arr1.CopyTo(Rezult, 0); Arr2.CopyTo(Rezult, Arr1.Length); return Rezult; } }
Решение задачи: «.NET 2.x Ошибка при десериализации»
textual
Листинг программы
public T ReceiveAnswer<T>() { var buffer = new byte[BufferSize]; _client.Receive(buffer); long receive = 0L, length = BitConverter.ToInt64(buffer, 0); byte[] receivedBuffer = new byte[length]; using (var mrs = new MemoryStream(receivedBuffer)) { while (receive < length) { int received = _client.Receive(buffer); mrs.Write(buffer, 0, received); receive += received; } mrs.Seek(0, SeekOrigin.Begin); return (T)new BinaryFormatter().Deserialize(mrs); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д