Не удается получить изображение через сокет TCP? - PullRequest
0 голосов
/ 23 марта 2012

У меня проблема с получением изображения через сокет TCP [.net 4.0]

Сервер:

Socket s = null;
Socket client;
private void button1_Click(object sender, EventArgs e)
    {
        s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        s.Bind(new IPEndPoint(IPAddress.Any, 9988));
        s.Listen(1);
        client = s.Accept();

        pictureBox1.Image = Image.FromStream(new NetworkStream(client));
        //Server freezes here and waiting for the image .. but in the Client side.. it tells that it sent.

        Console.WriteLine("Received.");
    }

Клиент:

Socket s = null;
private void button1_Click(object sender, EventArgs e)
    {
        s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        s.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9988));
        Rectangle bounds = Screen.GetBounds(Point.Empty);
        Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height);
        Graphics g = Graphics.FromImage(bitmap);
        g.CopyFromScreen(Point.Empty, Point.Empty, bounds.Size);
        bitmap.Save(new NetworkStream(s), ImageFormat.Png);
        Console.WriteLine("sent.");
    }

Edit: я делаю большое приложение .. изображение получалось просто отлично .. потом я сделал некоторые изменения в коде, поэтому стало сложно узнать, что я именно изменил ... теперь это не работает .. поэтому я сделал новые проекты и попробовал код вверх .. все еще не работает .. я знаю, что есть другие способы сделать это .. но я предпочитаю делать это так. Кто-нибудь знает, как это исправить ??

Ответы [ 2 ]

1 голос
/ 31 июля 2012

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

0 голосов
/ 23 марта 2012

Скорее всего, вам нужно закрыть сокет после отправки данных.

Image.FromStream(), вероятно, ожидает, пока NetworkStream не покажет, что больше нет байтов для обработки, но поскольку вы объявили Socket на уровне класса формы, он остается подключенным, и сервер ожидает дополнительных данных.

...