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());