Отправка и получение файла изображения C # - PullRequest
0 голосов
/ 25 июля 2011

Я уже некоторое время пытаюсь отправить файл изображения через сокеты. Я считаю, что я очень близок, но я еще не получил это. Я пытаюсь отправить изображение с сервера на клиент.

Вот мой код сервера:

//Init listener
listener = new TcpListener(new IPEndPoint(IPAddress.Any, 550));

//Start listening for connections
listener.Start();
Console.WriteLine("Waiting for connection");
s = listener.AcceptSocket();
//If we reach here, we have a connection
Console.WriteLine("Connected");
//Get the screenshot and apply it to our memory stream
img = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format32bppArgb);
imgG = Graphics.FromImage(img);
imgG.CopyFromScreen(0, 0, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);
ms = new MemoryStream();
img.Save(ms, ImageFormat.Jpeg);
img.Save("sc.jpg", ImageFormat.Jpeg);
//Convert image to byte array, and then send it
byte[] byteArray = ms.ToArray();
s.Send(byteArray);
s.Close();
Console.Read();

Вот мой код клиента:

client = new TcpClient();
client.Connect(new IPEndPoint(IPAddress.Parse(IPBox.Text), 550));
s = client.Client;
buffer = new byte[100000];
s.Receive(buffer);
ms.Read(buffer, 0, 100000);
img = (Bitmap)Image.FromStream(ms);
imgContainer.Image = (Image)img;

Я думаю, что я очень близко, но я могу быть далеко. Я новичок в сети, и мне нужна помощь, пожалуйста. Большое спасибо.

1 Ответ

2 голосов
/ 25 июля 2011

Проблема в том, что в вашем клиенте вы предполагаете, что получили от сервера 100000 байт, и вы помещаете все 100000 байт в поток памяти.страница для TcpClient , которая показывает получение от TcpClient с использованием базового NetworkStream.Кроме того, вы захотите отслеживать, сколько байтов вы действительно получили (это возвращаемое значение из функции NetworkStream.Read ).Наконец, вы захотите продолжать чтение, пока не будет больше данных для чтения с хоста.Если ваше изображение больше буфера, то у вас будет только частичное изображение.Пример на связанной странице для NetworkStream.Read показывает непрерывное чтение из потока, пока есть доступные данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...