Несколько UDP-пакетов в C#
Серия датаграмм на одном сокете обрабатывается в цикле с конечным счетчиком.
Цикл вызывает SendAsync для каждой
строки. Ниже отправитель три раза шлет текст
и печатает каждую строку:
using System.Net.Sockets;
using System.Text;
using UdpClient sender = new();
for (int i = 1; i <= 3; i++)
{
string text = "part" + i;
byte[] payload = Encoding.UTF8.GetBytes(text);
await sender.SendAsync(payload, payload.Length, "127.0.0.1", 18081);
Console.WriteLine(text);
}
Ответ на каждый пакет тоже можно слать в цикле на адрес из соответствующего приема. Отправитель тогда читает несколько ответов подряд:
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();
for (int i = 0; i < 3; i++)
{
UdpReceiveResult req = await listener.ReceiveAsync();
await listener.SendAsync(Encoding.UTF8.GetBytes("ok"), req.RemoteEndPoint);
}
});
await ready.Task;
using UdpClient sender = new();
for (int i = 1; i <= 3; i++)
{
await sender.SendAsync(Encoding.UTF8.GetBytes("q" + i), "127.0.0.1", 18081);
UdpReceiveResult ans = await sender.ReceiveAsync();
Console.WriteLine(Encoding.UTF8.GetString(ans.Buffer));
}
await server;
Сделайте счётчик посещений на порту 18083:
на каждую датаграмму увеличивайте число и
возвращайте его текстом отправителю.