在W10 Mobile

时间:2016-05-26 00:28:29

标签: udp uwp

问题

我无法从我的Wi-Fi连接手机上的UWP应用程序向台式机上的监听器发送UDP消息。

上下文

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

  • 手机运行Windows 10 Mobile。
  • 手机通过Wi-Fi连接到网络,地址为192.168.1.10
  • 监听器(接收过程)位于通过以太网电缆连接的台式计算机上,地址为192.168.1.3
  • 已知接收器可以工作。当使用WinForms和UdpClient构建的测试工具将数据报发送到192.168.1.3:1967时,侦听器会做出相应的响应。
  • 这不是防火墙问题,我尝试在侦听主机上禁用Windows防火墙。
  • 我已阅读该文档并查看了msdn上的示例应用程序。
  • 我的应用清单指定网络访问权限。 (当我尝试部署并修复它时,VS2015选择了这个。)

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

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

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");
}

附录

彼得托尔的回答和我对此的评论为本附录提供了背景信息。

有人可能想知道为什么任何理智的人都会像小数据报那样围绕一个小的有效载荷一次性包装。经过几天的愚蠢讨论这是多么愚蠢,最后我突然意识到它迫使我以一种不会对传输做出假设的方式编写我的代码:我可以在几乎没有代码工作或后果的情况下切换到TCP。

甚至可能需要这样做以支持网络约束和方便的管理(客户反馈)。所以看起来像一个简单事物的任意复杂化实际上是一个非常精明的设计。

1 个答案:

答案 0 :(得分:1)

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