我正在为Windows 8 / RT编写一个Windows Store / Metro / Modern / RT应用程序,需要在端口49030上接收UDP数据包,但我似乎无法接收任何数据包。我已经按照教程使用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示例,但它没有问题(当然)。我可以看到socket 是被打开/收听,因为它出现在resmon.exe中。我还在应用程序的清单中启用了所有适当的功能。我已经在我的x86笔记本电脑和Surface RT(远程调试)上进行了测试,它们都表现出相同的行为。
关于它为什么不起作用的任何想法?