SerializationException. Ошибка при десериализации BinaryFormatter. Недопустимый двоичный формат входного потока
Пишу клиент- серверное приложение аля google doc. Данные передаются по сокету (протокол TCP).
У клиента есть свой ричбокс, при изменении которого формируется объект (Package), который отправляется серверу для изменения буфера сервера (буфер сервера- это просто строка).
Я тестирую программу с 2ух компьютеров. На 1 запускаю приложения клиента и сервера, на другом только клиента. Одновременно ввожу текст в два ричбокса. Все нормально, пока на клиенте КОТОРЫЙ НА КОМПЬЮТЕРЕ, ГДЕ НЕ ЗАПУЩЕН СЕРВЕР (наверно это важно) не возникает исключение при десериализации:
SrializationException Недопустимый двоичный формат входного потока.
Не понимаю почему его нет, а потом оно возникает?
Код получения данных клиентом от сервера:
private void RecieveServerPackage()
{
byte[] serializedPackage;
int receivedBytes;
while (true)
{
try
{
serializedPackage = new byte[serverSocket.SendBufferSize];
receivedBytes = serverSocket.Receive(serializedPackage); // Получаем от сервера сериализованный пакет
if (receivedBytes > 0)
{
ProcessData(serializedPackage);
}
}
catch (Exception ex)
{
Console.WriteLine("Соединение потеряно: " + ex.Message);
if (serverSocket.Connected) serverSocket.Disconnect(false);
Thread.CurrentThread.Abort();
break;
}
}
}
Код сериализации объекта:
public byte[] SerializePackage()
{
BinaryFormatter bf = new BinaryFormatter();
MemoryStream ms = new MemoryStream();
try { bf.Serialize(ms, this); }
catch (Exception ex) { Console.WriteLine("Ошибка при сериализации BinaryFormatter : {0}", ex.ToString()); }
byte[] serializedPackage = ms.ToArray();
ms.Close();
return serializedPackage;
}
Код десериализации объекта в конструкторе (здесь выбрасывается исключение при попытке десериализации):
public Package(byte[] serializedPackage) // Конструктор получает сериализованный покет и десиарилизует в объект
{
BinaryFormatter bf = new BinaryFormatter();
MemoryStream ms = new MemoryStream(serializedPackage);
Package deserializedPackage = null;
try { deserializedPackage = (Package)bf.Deserialize(ms); }
catch(Exception ex) { Console.WriteLine("SOCKETLIB Ошибка при десериализации BinaryFormatter: {0}", ex.ToString()); }
ms.Close();
packageType = deserializedPackage.packageType;
clientId = deserializedPackage.clientId;
text = deserializedPackage.text;
position = deserializedPackage.position;
lenth = deserializedPackage.lenth;
}