在UWP app中接收UDP数据报需要做什么?

时间:2019-01-24 14:02:40

标签: sockets xamarin.forms uwp udpclient xamarin.uwp

在用于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(客户端)”,“ Internet(客户端和服务器)”和“专用网络(客户端和服务器)”功能。另外,我在调试设置中启用了“允许本地网络环回”。使用CheckNetIsolation工具,我可以验证我的应用程序是否在LoopbackExempt下列出。因此,这一切看起来不错,但我仍然无法收到任何UDP数据报。

要执行此操作,我还需要做其他事情吗?


修改 阅读更多有关此内容的信息,即使该应用列在LoopbackExempts下,也似乎禁止从同一台计算机接收数据,请参见Problems with UDP in windows 10. UWP。真烦人!

因此,我想接下来的问题将是:什么是IPC的良好(最好是无连接)替代方案?

1 个答案:

答案 0 :(得分:1)

  

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

如果这仅是出于测试目的,则可以使用CheckNetIsolation工具暂时启用从同一台计算机接收连接:

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

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