Как передать большой массив байтов используя Socket(UDP)

Рейтинг: 0Ответов: 0Опубликовано: 16.03.2023

Я знаю что существует UdpClient но таковы условия, использовать Socket.

У меня 2 приложения, FPW который отправляет на сервер запрос сделать скриншот и показать этот скриншот, и консольное приложение-сервер который получает команду и делает скриншот.

Код WPF (рабочий)

var client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            EndPoint endPoint = new IPEndPoint(IPAddress.Loopback, 27001);


            byte[] img = new byte[ushort.MaxValue];
            client.SendTo(Encoding.UTF8.GetBytes("screen"), endPoint);

            var imgByte = client.ReceiveFrom(img, ref endPoint);
            var recMessage = Encoding.UTF8.GetString(img, 0, imgByte);

Здесь происходит отправка команды screen чтобы сервер сделал скриншот

код консольного приложения

var listener = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            var listenerEP = new IPEndPoint(IPAddress.Loopback, 27001);
            EndPoint endPoint = new IPEndPoint(IPAddress.Any, 0);
            listener.Bind(listenerEP);

            var buffer = new byte[ushort.MaxValue];

            Bitmap bit = new Bitmap(1920, 1080);
            Size size = new Size(bit.Width, bit.Height);
            Graphics graphic = Graphics.FromImage(bit);
            ImageConverter converter = new ImageConverter();

 while (true)
            {
                var len = listener.ReceiveFrom(buffer, ref endPoint);

                // if получает команду screen и входит в кот для скриншота
                if (Encoding.Default.GetString(buffer, 0, len) == "screen")
                {
                    //здесь получается скриншот и переводится в массив байтов для дальнейший отправки в приложение WPF
                    graphic.CopyFromScreen(0, 0, 0, 0, size);
                    byte[] imgByte = (byte[])converter.ConvertTo(bit, typeof(byte[]));

                    // отправка байтов (выдаёт ошибку потому что массив слишком велик
                    listener.SendTo(imgByte, 0,  endPoint);


                }

и вот тут на отправке я не могу придумать как правильнее отправить этот массив Перед отправкой массива imgByte я проверял отправку другим более мелким массивом и всё работало, то есть отправка есть но как правильно мне отправить код я не знаю Если есть знающие прошу подскажите, буду благодарен. И повторюсь, условия домашнего задания таковы что надо использовать Socket и отправлять по UDP протоколу.

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

Ответы

Ответов пока нет.