Hallo,
ich habe ein Problem mit dem Empfang eines UPNP / SSDP Packetes.
IPEndPoint endPoint = new IPEndPoint(IPAddress.Broadcast, 1900);
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);
s.Connect(endPoint);
int length = 0;
byte[] buffer = new byte[10000];
while (true)
{
length = s.Receive(buffer);
string resp = Encoding.ASCII.GetString(buffer, 0, length).ToLower();
string sendedString = Encoding.Default.GetString(buffer);
Debug.WriteLine(sendedString);
}
Das Problem ist, es kommt nichts an. Firewall habe ich schon ausgeschlossen. Und wireshark sagt auch das das Packet ankommt. Vielleicht ist das Problem das das Packet als Ziel 239.255.255.250 was != meiner Ip ist. Ist wohl eine Broadcast adresse. Würde mich über jeden Hinweis freuen
Grüße
Jan
Laut http://de.wikipedia.org/wiki/Simple_Service_Discovery_Protocol ist die angegebene IP Adresse die Multicast-Adresse dieses Services. Bin mir gerade nicht sicher, muss man einem Lauscher explizit mitteilen, dass er Multicast-Pakete empfangen soll?
Schau dich mal beim Thema Multicast um! Da wirst du, denke ich, fündig.
Bin mir gerade nicht sicher, muss man einem Lauscher explizit mitteilen, dass er Multicast-Pakete empfangen soll?
Ja, du musst der Multicast Gruppe beitreten, bevor du die Daten empfangen kannst, ansonsten wäre es ja ein normaler Broadcast 😉.
Hier sollte eigentlich alle stehen, was du wissen musst:
http://www.codeproject.com/KB/IP/multicast.aspx
Gruß
Dario
Danke Leute,
7.e.q hat mich schon auf die richtige fährte geschickt, und Corpsegrinder hat mir dann auch noch die Lösung frei Haus geliefert.
So läufts:
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
s.Bind(new IPEndPoint(IPAddress.Any,1900));
s.SetSocketOption(SocketOptionLevel.IP,SocketOptionName.AddMembership, new MulticastOption(IPAddress.Parse("239.255.255.250"),IPAddress.Any));
int length = 0;
byte[] buffer = new byte[10000];
while (true)
{
length = s.Receive(buffer);
string resp = Encoding.ASCII.GetString(buffer, 0, length).ToLower();
string sendedString = Encoding.Default.GetString(buffer);
Debug.WriteLine(sendedString);
}