NetworkStream i wysyłanie naraz kilku danych.

0

Witam. Mam problem z klasą Networkstream, a dokładniej z metodą Read i Write. Otóż mam taki kod:

            client = new TcpClient();
            client.Connect("127.0.0.1", 1234);
            Byte[] recevl = Encoding.Unicode.GetBytes(textBox1.Text);
            Byte[] recevp = Encoding.Unicode.GetBytes(textBox2.Text);
            NetworkStream ns = client.GetStream();
            ns.Write(recevl, 0, recevl.Length);            
            ns.Write(recevp, 0, recevp.Length);
            ns.Close();

Jak widać są w nim komendy Write od razu nastepujące po sobie. Ale jak serwer ma je odebrac jako dwie różne tabele bajtów (czy jakoś tak):

IPEndPoint ipend = new IPEndPoint(ajpi, 1234);
            TcpListener listener = new TcpListener(ipend);
            listener.Start();
            TcpClient client = listener.AcceptTcpClient();
            NetworkStream stream = client.GetStream();
            if (stream.DataAvailable)
            {
                byte[] fromClient = new byte[1024];
                stream.Read(fromClient, 0, 1024);
                log = Encoding.Unicode.GetString(fromClient);
            }
            client = listener.AcceptTcpClient();
            stream = client.GetStream();
            byte[] pasfrom = new byte[1024];
            if (stream.DataAvailable)
            {
                stream.Read(pasfrom, 0, 1024);
                password = Encoding.Unicode.GetString(pasfrom);
                MessageBox.Show(password);
            }

To do zmiennej "log" "pakuje" dwa wysłane pakiety połączone ze sobą. Np. jak wysyłam najpierw Test, a potem Test2 to serwer spakuje to do jednej zmiennej i to będzie wyglądać tak: "TestTest2". A ja chcę to w osobnych zmiennych :/.

            client = new TcpClient();
            client.Connect("127.0.0.1", 1234);
            Byte[] recevl = Encoding.Unicode.GetBytes(textBox1.Text);
            Byte[] recevp = Encoding.Unicode.GetBytes(textBox2.Text);
            NetworkStream ns = client.GetStream();
            ns.Write(recevl, 0, recevl.Length);  //Tu byśmy wysłali "Test"          
            ns.Write(recevp, 0, recevp.Length); // A tu "Test2"
            ns.Close();

Nie wiem co się za tym kryje :/. Bardzo bym prosił o pomoc ;).

0

Kryje się za tym, że przez sieć nie przesyła się zmiennych tylko ciąg bajtów. Po stronie klienta nie wiadomo gdzie się kończy jedna zmienna, a zaczyna druga - po prostu tej informacji nie wysyłasz. Wysyłasz ciąg bajtów i tyle. Wymyśl sobie jakiś własny protokół przesyłu danych. Np. pomiędzy napisami wysyłaj bajt o wartości 0, i gdy klient napotka na 0 to będzie wiedział, że to, co zaraz przeczyta będzie "nową zmienną".

Albo użyj WCF i nie będziesz musiał robić połowy z tych rzeczy.

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