Używałem tego kodu, mianowicie klasy Packet i PlainPacket : http://yaras.pl/szyfrowana-komunikacja-tcp-w-csharp/4/ .
Dodatkowo, obiekt który chcę wysłać przez TCPClienta to

 [Serializable]
    class _Message : Packet
    {
        public int AddressIndex, HomeIndex;
        public string Text; 

        public _Message(int targetIndex, int homeIndex, string text)
        {
            HomeIndex = homeIndex;
            AddressIndex = targetIndex;
            Text = text;
        }
    }

Od strony klienta wysyłanie wygląda tak :

 
NetworkStream stream;
stream = client.GetStream();
w = new BinaryWriter(stream);
_Message Msg = new _Message(0,0,"test");
w.Write(Msg.Serialize());

Na serwerze odbieram :

 PlainPacket ObtainedPacket = PlainPacket.Deserialize(stream); //w tej linii wywala exception
Packet FinalPacket = ObtainedPacket.GetPacket();
_Message tmp = (_Message)FinalPacket;

Exception : [System.Runtime.Serialization.SerializationException] = {"Strumień wejściowy nie ma prawidłowego formatu binarnego. Zawartość początkowa (w bajtach): 04-23-4D-53-47-FC-01-41-41-45-41-41-41-44-2F-2F-2F ..."}

Gdzie leży problem?