首页 > 解决方案 > 在 UWP 应用中接收 UDP 数据报需要做什么?

问题描述

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

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

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

我知道 UWP 默认禁止环回通信,但是根据https://stackoverflow.com/a/44990978/487356进行调试应该是可能的。

在 UWP 项目中,我启用了“Internet (Client)”、“Internet (Client & Server)”和“Private Networks (Client & Server)”功能。我还在调试设置中启用了“允许本地网络环回”。并且使用 CheckNetIsolation 工具,我能够验证我的应用程序是否列在 LoopbackExempt 下。所以这一切看起来都不错,但我仍然无法接收任何 UDP 数据报。

我还需要做些什么才能使其正常工作吗?


编辑 阅读更多关于此的信息,即使应用程序列在 LoopbackExempts 下,似乎也禁止从同一台计算机接收数据,请参阅Windows 10 中的 UDP 问题。 UWP。这真的很烦人!

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

标签: socketsxamarin.formsuwpudpclientxamarin.uwp

解决方案


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

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

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

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


推荐阅读