Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
⊗csSpUdRcv 494 of 509 menu
◀ ▶

Прием UDP-пакета в C#

Приемник UDP ждет одну датаграмму. Вызов ReceiveAsync возвращает ее целиком: байты лежат в свойстве Buffer, строку собирают из этого массива. Приемник поднимают в Task.Run и только после привязки порта отправляют пакет, иначе ждать пришлось бы вечно.

Приемник на порту 18081 печатает текст пакета. Основной поток отправляет короткое сообщение на 127.0.0.1:

using System.Net; using System.Net.Sockets; using System.Text; TaskCompletionSource ready = new(); Task listener = Task.Run(async () => { using UdpClient server = new(18081); ready.SetResult(); UdpReceiveResult packet = await server.ReceiveAsync(); Console.WriteLine(Encoding.UTF8.GetString(packet.Buffer)); // выведет "probe" }); await ready.Task; using UdpClient client = new(); await client.SendAsync(Encoding.UTF8.GetBytes("probe"), "127.0.0.1", 18081); await listener;

Число байтов в принятой датаграмме - это длина массива Buffer. Тот же каркас печатает длину более длинного текста:

using System.Net; using System.Net.Sockets; using System.Text; TaskCompletionSource ready = new(); Task server = Task.Run(async () => { using UdpClient listener = new(18081); ready.SetResult(); UdpReceiveResult packet = await listener.ReceiveAsync(); Console.WriteLine(packet.Buffer.Length); // выведет 7 }); await ready.Task; using UdpClient sender = new(); await sender.SendAsync(Encoding.UTF8.GetBytes("probe-2"), "127.0.0.1", 18081); await server;

Примите один пакет с текстом "ready" и выведите его в консоль одной строкой.

После приема текста "metric" выведите число символов в полученной строке.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить