代码之家  ›  专栏  ›  技术社区  ›  Robert Hegner

在UWP应用程序中接收UDP数据报需要做什么?

  •  0
  • Robert Hegner  · 技术社区  · 6 年前

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

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

    我知道UWP在默认情况下禁止环回通信,但对于调试,根据 https://stackoverflow.com/a/44990978/487356

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

    我还需要做些什么才能让它起作用吗?


    编辑 阅读更多关于这方面的内容,看起来从同一台机器接收数据是被禁止的,即使该应用程序列在LoopbackExcempts下,请参阅 Problems with UDP in windows 10. UWP . 这真烦人!

    所以我想接下来的问题是:什么是IPC的好选择(最好是无连接的选择)?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Sunius    6 年前

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

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

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

    然而,如文件所述 here ,该工具必须作为管理员持续运行。我们使用这种机制对代码进行单元测试,效果非常好。