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

Ответ по UDP в C#

Ответ по UDP шлют на адрес, который уже лежит в принятой датаграмме.

После ReceiveAsync адрес отправителя доступен в свойстве RemoteEndPoint результата. Ответ собирают из короткого текста и шлют тем же сокетом через SendAsync на этот адрес. Приемник ждет в фоновой задаче, а запрос уходит из основного потока.

Приемник прочитает запрос и вернет короткое подтверждение:

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 request = await listener.ReceiveAsync(); await listener.SendAsync(Encoding.UTF8.GetBytes("ack"), request.RemoteEndPoint); }); await ready.Task; using UdpClient sender = new(); await sender.SendAsync(Encoding.UTF8.GetBytes("ping"), "127.0.0.1", 18081); UdpReceiveResult answer = await sender.ReceiveAsync(); Console.WriteLine(Encoding.UTF8.GetString(answer.Buffer));

Текст ответа можно выбрать по содержимому запроса, а адрес назначения по-прежнему берут из RemoteEndPoint принятой датаграммы. На строку "hello" вернут "got it", на любую другую - "ack":

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 request = await listener.ReceiveAsync(); string incoming = Encoding.UTF8.GetString(request.Buffer); string reply = incoming == "hello" ? "got it" : "ack"; await listener.SendAsync(Encoding.UTF8.GetBytes(reply), request.RemoteEndPoint); }); await ready.Task; using UdpClient sender = new(); await sender.SendAsync(Encoding.UTF8.GetBytes("hello"), "127.0.0.1", 18081); UdpReceiveResult answer = await sender.ReceiveAsync(); Console.WriteLine(Encoding.UTF8.GetString(answer.Buffer));

На порту 18082 на датаграмму "time" верните текущую минуту числом, на любой другой текст - "unknown".

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