Я пытаюсь отправить данные с помощью UdpClient на аппаратное устройство, которое затем отправляет «ответ» на тот же порт.
Очевидно, я впервые столкнулся с проблемой, что все остальные пытались сделать то же самое, и понял, что я должен был сделать это, используя 2 UdpClients.
Я видел несколько примеров, но ничего, что бы полностью соответствовало моим потребностям.
Я пришел к следующему решению, которое, похоже, работает, но я ищу какое-то подтверждение от гуру.
public async Task< byte[] > ReceiveAsync( byte[] datagram, CancellationToken cancellationToken )
{
byte[] buffer = null;
var tasks = new List< Task >
{
Task.Run( async () =>
{
using ( var client = new UdpClient( 5555 ) )
{
client.Client.ReceiveTimeout = 200;
var receiveDatagram = await client.ReceiveAsync();
buffer = receiveDatagram.Buffer;
}
}, cancellationToken ),
Task.Run( async () =>
{
using ( var client = new UdpClient() )
{
client.Connect( "10.0.0.50", 5555 );
await client.SendAsync( datagram, datagram.Length );
}
}, cancellationToken )
};
await Task.WhenAll( tasks.ToArray() );
return buffer;
}
Кажется ли это правильным или есть лучший способ?
Спасибо.