C#を使用して、 Windows ストアアプリケーション用の基本的なSSDP ( UDP ) ブロードキャスト/リスナーを実装しようとしています。
UDPネットワーキングに使用する必要があるクラスがWindows.Networking.Sockets
含まれていることがわかりました。DatagramSocket
ただし、現在の試行は問題なく実行されているようですが、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 秒のタイムアウトを使用しています。