Я создал простое приложение, которое взаимодействует по UDP, с конечной точкой на IP-адресе, указанном пользователем.Он использует System.Net.Sockets.UdpClient
, который довольно хорошо работает на Android - я могу отправлять и получать пакеты довольно стабильно.С одним вопиющим исключением ... Исключения.Кажется, полностью уклоняется try/catch
;я предполагаю, что основные ошибки реализации настолько сложны, что ошибки не могут быть обнаружены.Например:
UdpClient Udp { get; protected set; }
Udp.Connect("192.168.1.254"); // Any bad IP
try
{
int bytesSent = await udp.SendAsync(bytes, bytes.Length);
}
catch(Exception ex)
{
return null;
}
При тестировании на реальном устройстве Android, если пользователь вводит неверный IP-адрес, следующий шаг проверки связи с этим IP-адресом по протоколу UDP последовательно уничтожает приложение.Поведение совершенно странное тоже.Например, если я произвожу вызов в фоновом потоке, например, так:
Task.Run(ping).ConfigureAwait(false);
protected async Task ping()
{
try
{
await checkIp();
}
catch(Exception ex)
{
}
}
Тогда есть некоторые сценарии, в которых я могу получить исключение - но только во внешнем улове!Бросок происходит при вызове SendAsync
во внутренней попытке, и исключение составляет System.Net.Sockets.SocketException
с типом ConnectionRefused
!В зависимости от того, как именно я прохожу через это, иногда это попадается туда, иногда совсем нет;когда это совсем не так, приложение просто взрывается.Безумие!
Это ожидаемое поведение?Xamarin UdpClient просто не должен использоваться?Ошибка?Лучше подход, чем SendAsync
?Другое