UPnP Multicast: fehlende Antworten von M-SUCHE (Discovery)
Habe ich ein kleines Programm zum testen des UPnP Multicast (Visual C# 2010 Express unter Windows 7 Professional 64 Bit). Ich kann erhalten die UPnP-NOTIFY-Nachrichten, die von einem UPnP-Geräte in meinem Netzwerk. Aber wenn ich den M-SEARCH Message, ich bekomme keine Antworten.
Habe ich ausprobiert, der gleiche code auf einem iOS-Umgebung (Monotouch für iOS, läuft auf einem iPhone simulator auf einem Mac). Da es gut läuft und ich mich auf die Suche nach Antworten von meinem UPnP-Geräte. Ich kann auch sehen, der M-SEARCH-Nachricht von meinem windows-Programm.
Sieht es aus wie Windows (oder eine Firewall?) versteckt sich die Suche nach Antworten. Irgendeine Idee?
Hier ist der code:
IPEndPoint LocalEndPoint = new IPEndPoint(IPAddress.Any, 1900);
IPEndPoint MulticastEndPoint = new IPEndPoint(IPAddress.Parse("239.255.255.250"), 1900);
Socket UdpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
UdpSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
UdpSocket.Bind(LocalEndPoint);
UdpSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(MulticastEndPoint.Address, IPAddress.Any));
UdpSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 2);
UdpSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastLoopback, true);
Console.WriteLine("UDP-Socket setup done...\r\n");
string SearchString = "M-SEARCH * HTTP/1.1\r\nHOST:239.255.255.250:1900\r\nMAN:\"ssdp:discover\"\r\nST:ssdp:all\r\nMX:3\r\n\r\n";
UdpSocket.SendTo(Encoding.UTF8.GetBytes(SearchString), SocketFlags.None, MulticastEndPoint);
Console.WriteLine("M-Search sent...\r\n");
byte[] ReceiveBuffer = new byte[64000];
int ReceivedBytes = 0;
while (true)
{
if (UdpSocket.Available > 0)
{
ReceivedBytes = UdpSocket.Receive(ReceiveBuffer, SocketFlags.None);
if (ReceivedBytes > 0)
{
Console.WriteLine(Encoding.UTF8.GetString(ReceiveBuffer, 0, ReceivedBytes));
}
}
}
Sind Sie sicher, dass der M-SUCHE, die Sie sehen, auf iOS ist das aus Ihrem Windows-Programm? Haben Sie versucht, eine andere UPnP-discovery-tool auf Ihrem Windows-Rechner?
Ja, ich bin sicher. Ich habe anbei noch einige zusätzliche Zeichen, die auf der M-SEARCH-Nachricht, so dass ich erkennen konnte, die Nachricht auf iOS.
InformationsquelleAutor Jörn | 2012-10-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, ich habe das problem gelöst! Kleiner Fehler, große Wirkung:
Mein Programm sendet der M-SUCHE auf port 1900, die gebunden ist an die UPnP multicast-Gruppe. Da ich gebunden die LocalEndPoint Sie den gleichen port, der UPnP-Geräte Antworten mit unicast-port 1900. Auf iOS hat es geklappt, weil mein Programm war der einzige Dienst, der an diese gebunden. Aber auf dem PC, ich habe mehrere Dienste gebunden an port 1900 (gefunden mit "netstat -p UDP -a"). Also die unicast-Nachrichten, die von der UPnP-Geräten wurde aufgenommen von einem der anderen Dienste.
Die Lösung: ich habe gebunden, die LocalEndPoint an einen freien port (z.B. 60000), und jetzt funktioniert es einwandfrei!
Ich habe das gleiche Problem aber ich kann es nicht ändern, mein Hafen. Gibt es eine andere Möglichkeit um dieses Problem zu beheben?
Nicht an einen bestimmten Anschluss gebunden (60000), Fragen Sie einfach für eine Ephemere (0)! Oder an einem Tag dies wird fehlschlagen, weil jemand anderes mit 60000
InformationsquelleAutor Jörn
Erstellen von lokalen Endpunkt-port 0 (null) zu binden, einen freien port nicht mit einem festen port. Ein weiterer Punkt entdeckt. Die Bindung IP-Adresse.Any oder IP-Adresse.Loopback-erhalten Sie Antworten von Microsoft (lokalen?) system, wo, wie die Bindung an einen der LAN-Adresse(N) erhalten Sie Antworten aus dem lokalen Netz. Erste IPV4-Adresse können Sie das wie folgt:
Environment.GetEnvironmentVariable("COMPUTERNAME")
kann ersetzt werden durchEnvironment.MachineName
.Vielen Dank für diese ein. IP-Adresse.Jeder wurde wieder 0.0.0.0 für meine Maschine und es wurde nichts gesendet/empfangen (ich habe über 30 VPNs und andere Netzwerk-Adapter so konfiguriert, dass das vielleicht die Ursache).
InformationsquelleAutor VBWebProfi
Für die Nachwelt: Einstellung alle diese genannten Optionen nicht notwendig ist für M-SUCHE und kann sogar kontraproduktiv sein:
Also tun Sie es nicht.
InformationsquelleAutor Nas Banov