我正在尝试使用C#为Windows Store应用程序实现基本的SSDP ( UDP ) 广播/侦听器。
我发现它Windows.Networking.Sockets
包含DatagramSocket
我需要用于UDP网络的类。
但是,我目前的尝试似乎执行得很好,但通过Wireshark没有结果,也没有从网络上的设备得到响应。
这是我目前正在使用的代码(并通过 RT Simulator 运行):
public async static Task<IEnumerable<HueBridge>> DiscoverAsync(TimeSpan timeout)
{
if (timeout <= TimeSpan.Zero)
throw new ArgumentException("Timeout value must be greater than zero.", "timeout");
var discoveredBridges = new List<HueBridge>();
using (var socket = new DatagramSocket())
{
while (true)
{
var bridgeWasFound = false;
socket.MessageReceived += (sender, e) =>
{
var bpx = true; // breakpoint here for success
};
var multicastIP = new HostName("239.255.255.250");
await socket.BindServiceNameAsync("1900");
socket.JoinMulticastGroup(multicastIP);
using (var writer = new DataWriter(socket.OutputStream))
{
var request = new StringBuilder();
request.AppendLine("M-SEARCH * HTTP/1.1");
request.AppendLine("HOST: 239.255.255.250:1900");
request.AppendLine("MAN: ssdp:discover");
request.AppendLine("MX: 5");
request.AppendLine("ST: ssdp:all");
writer.WriteString(request.ToString());
await writer.FlushAsync();
}
if (timeout > TimeSpan.Zero)
await Task.Delay(timeout);
if (!bridgeWasFound)
break; // breakpoint here for failure check
}
}
return discoveredBridges;
}
关于我可能做错了什么的任何想法?我没有遇到异常,并且我在清单中设置了正确的功能。我的断点break
总是被击中,我正在使用 10 秒的超时。