TCP przesyłanie tekstu/obrazu

0

Witam,
mam problem z poprawnym zinterpretowaniem tego co przyszło od klienta (co zawiera tablica bajtów) A także określenie jej wielkości przy odbiorze.
Urywek kodu przedstawia się w sposób następujący:
Klient:

   private void button2_Click(object sender, EventArgs e)
        {
            try
            {
                using(ms = new MemoryStream())
                {
                    using(obraz = new Bitmap(@pictureBox1.Image))
                    {
                        obrazByte = null;
                        ns = client.GetStream();
                        obraz.Save(ms, ImageFormat.Png);
                        obrazByte = ms.GetBuffer();

                        ns.Write(obrazByte, 0, obrazByte.Length);

                    }
                    ms.Close();
                }

            }
            catch (Exception ex)
            {

            }
        }

Serwer:

public void BGklient_DoWork(object sender, DoWorkEventArgs e)
        {
            Console.WriteLine("* Watek zostal uruchomiony.");
            NetworkStream abcStream;
            TcpClient abcKlient = client;

            while (true)
            {

                try
                {
                    abcStream = abcKlient.GetStream();
                    Console.WriteLine("-- Otrzymałem pakiet.");

                    byte[] obrazByte = new byte[8388608];


                    abcStream.Read(obrazByte, 0, obrazByte.Length);

                    using (MemoryStream ms = new MemoryStream(obrazByte))
                    {
                        Image obraz = Image.FromStream(ms);
                        pictureBox1.Image = obraz;
                    }


                }
                catch (Exception ex)
                {
                    MessageBox.Show("Wyjatek: " + ex.ToString());
                }

            }
        } 

Po 1. Nie wiem w jaki sposób mam określić w serwerze wielkość tablicy, ustawiłem na:

byte[] obrazByte = new byte[8388608];

Czy da się to zrobić w inny sposób? Próbowałem poprzez:

byte[] obrazByte = new byte[client.ReceiveBufferSize];

Nie działa.
Po 2. Gdybym zmodyfikował trochę klienta i serwer w taki sposób, żeby wysyłać zarówno tekst lub obraz w zależności od potrzeby. Mam problem z interpretowaniem tego co w danym momencie przyszło. Myślałem, żeby zrobić to za pomocą serializacji czy rozwiąże to mój problem ?
Proszę o pomoc.

EDIT:
Aktualnie robię to za pomocą: BinaryWriter i BinaryReader.
W jaki sposób mogę pobrać odpowiednie bajty i wczytać jako obrazek a w jaki sposób odróżnić, że jest to zwykły tekst ?

BinaryReader reader = new BinaryReader(abcKlient.GetStream());
0

Powinieneś wysłać serwerowi wielkość w bajtach tego obrazka i na serwerze odebrać tyle bajtów.

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