Windows Phone 8 中的 SSDP 搜索

本文关键字:SSDP 搜索 中的 Phone Windows | 更新日期: 2023-09-27 18:31:41

我是SSDP/UPNP/Sockets和所有爵士乐的新手。我正在玩弄它,我只是想看看我的网络上的通用 SSDP 搜索会带来什么。

使用此SSDP嗅探器应用程序,我得到了很多结果,因此我正在尝试重新创建它。

我正在使用以下代码,我已经找到了各种版本,但我所做的所有调整似乎都没有带来任何结果。我在这里几乎不知所措,并希望得到任何指导。

谢谢!

private const string SSDP_IP = "239.255.255.250";
private const string SSDP_PORT = "1900";
private const string SSDP_QUERY = "M-SEARCH * HTTP/1.1'r'n" +
                                  "Host: " + SSDP_IP + ":" + SSDP_PORT + "'r'n" +
                                  "Man: ssdp:discover'r'n" +
                                  "ST: ssdp:all'r'n";
DataGramSocket socket;
async public void SsdpQueryAsync()
{
    var remoteIP = new Windows.Networking.HostName(SSDP_IP);
    var reqBuff = Encoding.UTF8.GetBytes(SSDP_QUERY);
    socket = new DatagramSocket();
    socket.MessageReceived += (sender, args) =>
    {
        // This is invoked for each device that responds to the query...
        Task.Run(() =>
            {
                 // do something useful
            });
    };
    await socket.BindEndpointAsync(null, "");
    socket.JoinMulticastGroup(remoteIP);
    using (var stream = await socket.GetOutputStreamAsync(remoteIP, SSDP_PORT))
    {
        await stream.WriteAsync(reqBuff.AsBuffer());
    }
    await Task.Delay(5000);
}

Windows Phone 8 中的 SSDP 搜索

我不熟悉 C# 或 dotnet API,但我可以看到 M-SEARCH 消息的一些细节错误:

  • MAN 标头必须用双引号括起来,因此MAN: "ssdp:discover"'r'n
  • 缺少 MX 标头(多播需要)
  • 缺少用户代理标头
  • 最后缺少一个空行
  • 标题名称应该不区分大小写,但我会使用大写以防万一......

有关更多详细信息,请参阅设备体系结构参考 pdf