Что необходимо сделать для получения дейтаграмм UDP в приложении UWP? - PullRequest
0 голосов
/ 24 января 2019

В моем приложении Xamarin.Forms для UWP у меня есть следующий простой код для получения дейтаграммы UDP:

using (var udpClient = new UdpClient(port))
{
  var datagram = await udpClient.ReceiveAsync();
}

В целях тестирования мне нужно запустить это приложение из Visual Studio и с того же компьютера.отправить дейтаграмму в приложение с какой-либо (не UWP) терминальной программой.Но это не работает - ReceiveAsync() никогда не возвращается.

Я знаю, что UWP по умолчанию запрещает обратную связь, но для отладки это должно быть возможно в соответствии с https://stackoverflow.com/a/44990978/487356.

В UWPВ проекте я включил функции «Интернет (клиент)», «Интернет (клиент и сервер)» и «Частные сети (клиент и сервер)».Также я включил «Разрешить петлю локальной сети» в настройках отладки.И с помощью инструмента CheckNetIsolation я смог убедиться, что мое приложение занесено в список LoopbackExempt.Так что все это выглядит хорошо, но я все еще не могу получить дейтаграммы UDP.

Есть ли что-то еще, что мне нужно сделать, чтобы это работало?


Редактировать Читая немного больше об этом, похоже, что получение данных с той же машины запрещено, даже если приложение указано в списке LoopbackExempts, см. Проблемы с UDP в Windows 10. UWP .Это действительно раздражает!

Так что я думаю, что последующим вопросом будет: Какая хорошая (предпочтительно без соединения) альтернатива для IPC?

1 Ответ

0 голосов
/ 26 января 2019

В целях тестирования мне нужно запустить это приложение из Visual Studio и с того же компьютера отправить дейтаграмму в приложение с помощью некоторой (не UWP) терминальной программы. Но это не работает - ReceiveAsync () никогда не возвращается.

Если это только для целей тестирования, вы можете использовать инструмент CheckNetIsolation, чтобы временно разрешить прием соединений с того же компьютера:

CheckNetIsolation.exe LoopbackExempt -is -n=<AppContainer or Package Family>

Однако, как задокументировано здесь , инструмент должен постоянно работать от имени администратора. Мы используем этот механизм для модульного тестирования нашего кода, и он работает очень хорошо.

...