Если производительность не имеет значения, быстрым и простым подходом может быть метод ReceiveAsync от UdpClient:
https://msdn.microsoft.com/de-de/library/system.net.sockets.udpclient.receiveasync(v=vs.110).aspx
Затем вы можете использовать результат (UdpReceiveResult) для фильтрации для конкретной удаленной конечной точки, откуда вы хотите получать данные. Вот небольшой пример:
private async void ReceiveBytesAsync(IPEndPoint filter)
{
UdpReceiveResult receivedBytes = await this._udpClient.ReceiveAsync();
if (filter != null)
{
if (receivedBytes.RemoteEndPoint.Address.Equals(filter.Address) &&
(receivedBytes.RemoteEndPoint.Port.Equals(filter.Port)))
{
// process received data
}
}
}