Ich habe AsyncUdpSocket erfolgreich verwendet, um SSDP-Discovery auszuführen und Controller zu finden. Hier sind meine Code-Schnipsel:
initialisieren und Einrichtung der Buchse:
// AsyncUdpSocket *ssdpSock = [[AsyncUdpSocket alloc] initWithDelegate:self];
AsyncUdpSocket *ssdpSock = [[AsyncUdpSocket alloc] initIPv4];
[ssdpSock setDelegate:self];
Beachten Sie die erste Zeile als Kommentar gekennzeichnet. Ich habe auf der AsyncUdpSocket forums einige Probleme mit Duplikaten gefunden. Ich glaube nicht, dass ich ihnen gegenüber stand, aber ich habe es trotzdem getan.
Ich habe die Fehlerprüfung, und es war nützlich, weil ich während meiner Debuggen nicht schließen Sockets wurde und ich begann sich Fehler Buchse Setup:
NSError *socketError = nil;
if (![ssdpSock bindToPort:1900 error:&socketError]) {
NSLog(@"Failed binding socket: %@", [socketError localizedDescription]);
return statusController;
}
if(![ssdpSock joinMulticastGroup:@"239.255.255.250" error:&socketError]){
NSLog(@"Failed joining multicast group: %@", [socketError localizedDescription]);
return statusController;
}
if (![ssdpSock enableBroadcast:TRUE error:&socketError]){
NSLog(@"Failed enabling broadcast: %@", [socketError localizedDescription]);
return statusController;
}
[ssdpSock sendData:[self.discoverControllerString dataUsingEncoding:NSUTF8StringEncoding]
toHost:@"239.255.255.250"
port:1900
withTimeout:2
tag:1];
Beachten Sie die Änderungen, die ich zu der Zeit heraus gemacht haben. Und dann endlich das Empfangs-Setup und schloss den Socket. Notieren Sie den Socket schließen. Da ich in meiner eigenen Klasse bin, wenn ich das hier ausführe - der obige Code funktionierte nicht für mich.
Die wichtigste Änderung war wahrscheinlich "NEIN", wenn ich meinen Controller nicht gefunden habe. Der erste Empfang war übrigens die Entdeckungsnachricht selbst zurückkommen. Und wenn ich die AsyncUdpSocket.h-Datei sorgfältig durchlese - "NO" zurückschicke, wenn es sich nicht um ein Paket handelt, nach dem Sie gesucht haben.
Beachten Sie auch, dass ich ARC in meinem Code verwende, aber ich kompilierte die AsyncUdpSocket ohne ARC-Unterstützung.
Hallo Savvybud, sieht gut aus, aber von der Spitze meines Kopfes (es war eine Weile her, dass ich das getan habe) Ich denke, dein Problem liegt bei der BindToPort. Ich bin ziemlich sicher, dass dies der Port ist, an den Rückmeldungen gesendet werden und nicht 1900 sein sollten, da dies für Multicasts reserviert ist. Wenn Sie dies auf Null setzen, wird das System eins zuweisen und es sollte funktionieren. sendData sieht gut aus. –
Magic Bullet Dave, du bist der Mann! – savvybud