在用于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的良好(最好是无连接)替代方案?
答案 0 :(得分:1)
出于测试目的,我需要在Visual Studio中运行此应用程序,并从同一台计算机上通过一些(非UWP)终端程序向该应用程序发送数据报。但这不起作用-ReceiveAsync()永远不会返回。
如果这仅是出于测试目的,则可以使用CheckNetIsolation工具暂时启用从同一台计算机接收连接:
CheckNetIsolation.exe LoopbackExempt -is -n=<AppContainer or Package Family>
但是,如here所述,该工具将必须以管理员身份连续运行。我们使用这种机制对代码进行单元测试,并且效果很好。