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

Ответы (0 шт):