【发布时间】: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