【问题标题】:What needs to be done to receive UDP datagrams in UWP app?在 UWP 应用中接收 UDP 数据报需要做什么?
【发布时间】:2019-06-18 07:02:55
【问题描述】:

在用于 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 下,也禁止从同一台机器接收数据,请参阅Problems with UDP in windows 10. UWP。这真的很烦人!

所以我猜接下来的问题是:对于 IPC,什么是好的(最好是无连接的)替代方案?

【问题讨论】:

  • 你的理解是正确的。 “使用 IP 环回地址的网络通信不能用于 Windows 运行时应用程序中的进程间通信(两个不同的应用程序之间),因为这受到网络隔离的限制。” '但是出于通信目的,同一进程内的应用程序中允许使用 IP 环回地址进行网络通信'。所以,如果是为了测试目的,你可以像官方的 UWP DatagramSocket sample 那样做。在同一个应用中收听和连接。

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


【解决方案1】:

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

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

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

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

【讨论】:

  • 这成功了,谢谢!此外,这实际上取决于您使用的端口。我不得不尝试一些,直到找到一个有效的。
猜你喜欢
  • 2012-01-23
  • 2014-06-19
  • 1970-01-01
  • 2017-12-12
  • 1970-01-01
  • 2011-05-13
  • 1970-01-01
  • 2013-05-17
  • 2021-09-26
相关资源
最近更新 更多