【问题标题】:SSDP Search in Windows Phone 8Windows Phone 8 中的 SSDP 搜索
【发布时间】:2013-09-16 18:33:19
【问题描述】:

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

【问题讨论】:

  • “似乎没有带来任何结果”是什么意思?你有错误吗?并返回空缓冲区?还有什么?
  • 没有收到任何消息,因此 socket.MessageReceived 永远不会被触发。

标签: c# .net windows-phone-8 upnp ssdp


【解决方案1】:

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

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

查看Device Architecture reference pdf了解更多详情

【讨论】:

  • 我曾在 MAN 标头中使用双引号尝试过。我在那里有 MX 标头(不知道为什么我没有在这篇文章中)。我之前曾尝试将所有标题名称都设为大写。解决它的是最后的空行。哇!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多