.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);
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д