4

我正在为需要在端口 49030 上接收 UDP 数据包的 Windows 8/RT 编写一个 Windows Store/Metro/Modern/RT 应用程序,但我似乎无法接收任何数据包。我已经按照使用DatagramSocket信函的教程进行操作,但我什么也没得到。我知道我的发送程序正在发送数据,正如我在wireshark 上看到的那样。我还编写了一个测试 C# 控制台应用程序,它使用通过 UDP 正确接收数据的常规 BSD 套接字 API (System.Net.Sockets.Socket)。

这是有效的代码:

Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
s.Bind(new IPEndPoint(IPAddress.Any, 49030));
byte[] buf = new byte[5000];
while (true)
{
    Console.WriteLine("Received " + s.Receive(buf) + " bytes.");
}

这将输出报告正在发送的字节数的行,如预期的那样。

我的 RT 应用程序代码:

public async void StartListening()
{
    DatagramSocket s = new DatagramSocket();
    s.MessageReceived += s_MessageReceived;
    await s.BindServiceNameAsync(this._port.ToString());   
}

void s_MessageReceived(DatagramSocket sender, DatagramSocketMessageReceivedEventArgs e)
{
    System.Diagnostics.Debug.WriteLine("Hark! A packet!");  // Breakpoint here
}

调用后StartListening(),断点永远不会被命中,并且不会在输出日志中打印任何内容。

我尝试运行 MSFT 提供的 DatagramSocket 示例,它没有问题(当然)。我可以看到套接字正在打开/监听,因为它显示在 resmon.exe 中。我还在应用程序的清单中启用了所有适当的功能。我已经在我的 x86 笔记本电脑和 Surface RT(远程调试)上对其进行了测试,它们都表现出相同的行为。

关于为什么它不起作用的任何想法?

4

0 回答 0