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