我正在尝试使用C#实现一个基本的SSDP(UDP)广播/监听器,用于Windows Store应用程序。
我发现Windows.Networking.Sockets包含DatagramSocket类,这是我需要用于UDP网络的类。
然而,我的当前尝试似乎执行得很好,但在Wireshark中没有结果,并且未从网络上的设备获得响应。
以下是我目前正在使用的代码(并通过RT模拟器运行):
我发现Windows.Networking.Sockets包含DatagramSocket类,这是我需要用于UDP网络的类。
然而,我的当前尝试似乎执行得很好,但在Wireshark中没有结果,并且未从网络上的设备获得响应。
以下是我目前正在使用的代码(并通过RT模拟器运行):
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秒的超时时间。