SSDP在Windows Phone 8的搜索SSDP、Windows、Phone

2023-09-04 03:45:48 作者:屠你满门

我是新的SSDP / UPNP /插座和所有的爵士乐。我用它打了一下周围,我只是想看看我的网络上通用的SSDP搜索将弹出。

使用此 SSDP嗅探器的应用程序,我得到了不少成果,所以我试图重新创建。

我用下面的code,我已经发现了各种版本,但所有的调整我似乎并没有带回任何结果。我pretty的太多茫然这里将AP preciate任何指导。

谢谢!

 私人常量字符串SSDP_IP =239.255.255.250;
私人常量字符串SSDP_PORT =1900;
私人常量字符串SSDP_QUERY =M-SEARCH * HTTP / 1.1 \ r \ N+
                                  主持人:+ SSDP_IP +:+ SSDP_PORT +\ r \ N+
                                  男子:SSDP:发现\ r \ N+
                                  ST:SSDP:所有\ r \ N的;

DatagramSocket的插座;

异步公共无效SsdpQueryAsync()
{
    VAR REMOTEIP =新Windows.Networking.HostName(SSDP_IP);
    VAR reqBuff = Encoding.UTF8.GetBytes(SSDP_QUERY);

    插座=新的DatagramSocket();

    socket.MessageReceived + =(发件人,参数)=>
    {
        //该被调用的每个响应该查询设备...
        Task.Run(()=>
            {
                 //做些有益的事
            });
    };

    等待socket.BindEndpointAsync(NULL,);

    socket.JoinMulticastGroup(REMOTEIP);

    使用(VAR流=等待socket.GetOutputStreamAsync(REMOTEIP,SSDP_PORT))
    {
        等待stream.WriteAsync(reqBuff.AsBuffer());
    }

    等待Task.Delay(5000);
}
 

解决方案

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

MAN标头必须用双引号括起来,所以 MAN:SSDP:发现\ r \ñ MX头部丢失(用于多播) User-Agent头是缺少 在最终错过了一个空行 在头名据称不区分大小写,但我会用大写以防万一......

请参见设备架构参考PDF 了解更多细节

I'm new at SSDP/UPNP/Sockets and all that jazz. I'm playing around with it a bit and I just want to see what a generic SSDP search on my network will bring up.

Windows Phone 8搜索热度飙升雅虎前列

Using this SSDP Sniffer app, I get a lot of results so I'm attempting to recreate this.

I'm using the following code, which I've found various versions of, but all the tweaking I do doesn't appear to bring back any results. I pretty much at a loss here and would appreciate any guidance.

thanks!

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

解决方案

I'm not familiar with C# or dotnet APIs, but I can see some details wrong with the M-SEARCH message:

MAN header must be enclosed in double quotes, so MAN: "ssdp:discover"\r\n MX header is missing (required for multicast) USER-AGENT header is missing missing an empty line in the end Header names are supposedly case insensitive, but I'd use upper case just in case...

See the Device Architecture reference pdf for more details