2013-09-16 2 views
1

Je suis nouveau à SSDP/UPNP/Sockets et tout ce jazz. J'y joue un peu et je veux juste voir ce qu'une recherche SSDP générique sur mon réseau va faire apparaître.SSDP Recherche dans Windows Phone 8

En utilisant cette application SSDP Sniffer, j'obtiens beaucoup de résultats donc j'essaye de recréer ceci. J'utilise le code suivant, dont j'ai trouvé plusieurs versions, mais toutes les modifications que je fais ne semblent pas ramener de résultats. Je suis à peu près perdue et j'apprécierais toute direction.

merci!

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

Que signifie « ne semble pas ramener aucun résultat » signifie ? Avez-vous une erreur? et tampon vide retourné? autre chose? –

+0

Aucun message n'est jamais reçu, socket.MessageReceived n'est jamais déclenché. – earthling

Répondre

2

Je ne suis pas familier avec C# ou API dotnet, mais je peux voir quelques détails mal avec le message M-RECHERCHE:

  • tête MAN doit être entre guillemets, donc MAN: "ssdp:discover"\r\n
  • MX-tête est manquante (nécessaire pour la multidiffusion)
  • tête User-Agent est manquant
  • manquant une ligne vide à la fin
  • noms d'en-tête sont censés être insensibles à la casse, mais j'utiliser majuscules juste au cas où ...

Voir la Device Architecture reference pdf pour plus de détails

+0

Je l'avais essayé avec des guillemets doubles dans l'en-tête MAN. J'ai eu l'en-tête MX là (je ne sais pas pourquoi je ne l'ai pas fait dans ce post). J'avais déjà essayé de faire tous les noms d'en-tête en majuscules. Ce qui l'a résolu était la ligne vide à la fin. HOU LA LA! – earthling