Deserializacja - pomiedzy exekami ?

0
    [Serializable()]
        struct MSG
        {
            public int v;
            public int PT;
        }

KLIENT:

>           MSG msg;
            msg.PT = 4;
            msg.v = 1;

            TcpClient client = new TcpClient("127.0.0.1", 9000);
            NetworkStream strim = client.GetStream();
            BinaryFormatter bin = new BinaryFormatter();
            bin.Serialize(strim, msg);
            strim.Flush();
SERWER:

            while (true)
            {
                TcpClient client = tcpListener.AcceptTcpClient();
                NetworkStream strim = client.GetStream();
                BinaryFormatter formatter = new BinaryFormatter();
                MSG xxx = (MSG)formatter.Deserialize(client.GetStream());
                MessageBox.Show(xxx.PT.ToString());
                MessageBox.Show(xxx.v.ToString());           
                client.Close();
            }

Error: Unable to find assembly 'Klient, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.

O co tu chodzi ??
Serializacja do pliku ladnie cyka...

0

To dlatego, że serwer dostaje obiekt typu Klient.MSG, który nie jest tym samym co Serwer.MSG; wyciągnij MSG do osobnego pliku i nadaj mu jakiś namespace. Jeśli to też nie pomoże to spróbuj zadeklarować MSG w dllce wspólnej dla obu programów.

0

Serializator zapisuje sobie, ze struktura MSG jest w namespace X (lub zadnej) oraz w assebly Klient, wersja 1.0.0.0, Culture=neutral, niepodpisanym (PublicKeyToken=null). Przy deserializacji szuka najpierw takiego assembly, pozniej definicji takiej klasy, pozniej tworzy obiekt tejze klasy i podstawia zapisane wartosci. W Twoim wypadku wylatuje juz w pierwszej fazie. Wydziel msg do osobnego assembly, ktore bedzie u klienta i na serwerze.

1 użytkowników online, w tym zalogowanych: 0, gości: 1