在 UWP 应用程序中接收 UDP 数据报需要做什么?

What needs to be done to receive UDP datagrams in UWP app?

在我的 Xamarin.Forms UWP 应用程序中,我有以下简单的代码来接收 UDP 数据报:

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

出于测试目的,我需要从 Visual Studio 中 运行 此应用程序,并从同一台计算机使用某些(非 UWP)终端程序向该应用程序发送数据报。但它不起作用 - ReceiveAsync() 从不 returns.

我知道UWP默认是禁止环回通信的,不过根据调试应该可以的。

在 UWP 项目中,我启用了 "Internet (Client)"、"Internet (Client & Server)" 和 "Private Networks (Client & Server)" 功能。我还在调试设置中启用了 "Allow local network loopback"。使用 CheckNetIsolation 工具,我能够验证我的应用是否列在 LoopbackExempt 下。所以这一切看起来不错,但我仍然无法收到任何 UDP 数据报。

我还需要做些什么才能让它工作吗?


编辑 阅读更多相关信息,即使应用程序列在 LoopbackExempts 下,似乎也禁止从同一台机器接收数据,请参阅 Problems with UDP in windows 10. UWP。这真的很烦人!

所以我想接下来的问题是:IPC 的一个好的(最好是无连接)替代方案是什么?

For testing purposes I need to run this app from within Visual Studio and from the same computer send a datagram to the app with some (non-UWP) terminal program. But it doesn't work - ReceiveAsync() never returns.

如果这只是为了测试目的,您可以使用 CheckNetIsolation 工具暂时启用从同一台机器接收连接:

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

但是,如记录 here 所述,该工具必须持续 运行 作为管理员。我们使用这种机制对我们的代码进行单元测试,并且效果很好。