繁体   English   中英

Windows Phone 8中的SSDP搜索

[英]SSDP Search in Windows Phone 8

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

使用这个SSDP Sniffer应用程序,我得到了很多结果,所以我试图重新创建它。

我正在使用以下代码,找到了各种版本,但是我所做的所有调整似乎都没有带来任何结果。 我在这里很茫然,不胜感激。

谢谢!

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);
}

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

  • MAN标头必须用双引号引起来,因此MAN: "ssdp:discover"\\r\\n
  • MX标头丢失(多播所需)
  • 缺少USER-AGENT标头
  • 最后缺少一个空行
  • 标题名称应该是不区分大小写的,但为了以防万一,我将使用大写形式...

有关更多详细信息,请参见设备架构参考pdf

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM