在 W10 Mobile 上使用 DatagramSocket 发送 UDP

Send UDP with DatagramSocket on W10 Mobile

问题

我无法从连接到 phone 的 Wi-Fi 上的 UWP 应用向桌面计算机上的侦听器发送 UDP 消息。

上下文

phone 上的 UWP 应用程序必须将数据发送到网络上其他位置的进程。

我可以在 phone 上远程调试应用程序 运行。它执行 WriteString 调用而没有发生意外,但 Wireshark 没有报告应该生成的 UDP 流量。

这是问题代码的示例。为简单起见,侦听器的 IP 地址是硬编码的,并且在测试时已知是正确的。 phone 在网络上并在测试前立即响应 192.168.1.10 的 ping。

DatagramSocket _ds = new DatagramSocket();
HostName _hostname = new HostName("192.168.1.3");

private async void Grid_DoubleTapped(object sender, DoubleTappedRoutedEventArgs e)
{
  using (var w = new DataWriter(await _ds.GetOutputStreamAsync(_hostname, "1967")))
    w.WriteString("CC");
  Debug.WriteLine("CC");
}

附录

Peter Torr 的回答和我对此的评论为本附录提供了上下文。

有人可能想知道为什么任何理智的人都会将流包装在像数据报这样的小有效负载一次性的东西周围。在数天抱怨这是多么愚蠢之后,我终于明白,它迫使我以一种不对传输做出假设的方式编写我的代码:我可以切换到 TCP,几乎没有代码工作或后果。

甚至可能需要执行此操作以支持网络限制和方便的管理(客户反馈)。所以看似简单事物的任意复杂化实际上是一个非常精明的设计。

尝试调用 await w.StoreAsync() 实际发送位。