UDP Broadcast / Device Discovery en iOS?

Estoy trabajando para intentar desarrollar un medio para descubrir los dispositivos Logitech Harmony Hub en mi networking local, desde una aplicación de iOS. El concepto se inspira en este proyecto NODE.JS, que parece enviar una transmisión UDP a la dirección 255.255.255.255 y luego procura la dirección IP de Logitech (que es todo lo que busco). Al probar el proyecto NODE.JS en mi networking doméstica desde mi Mac, encuentra con éxito el Logitech Harmony Hub.

Estoy usando CocoaASyncSocket , y debo admitir, mi comprensión de cómo funcionan las transmisiones / descubrimientos de UDP puede estar aquí. Esto es lo que estoy haciendo;

 import UIKit import CocoaAsyncSocket class ViewController: UIViewController, GCDAsyncUdpSocketDelegate { var address = "255.255.255.255" var port:UInt16 = 5224 var socket:GCDAsyncUdpSocket! var socketReceive:GCDAsyncUdpSocket! var error : NSError? override func viewDidLoad() { super.viewDidLoad() let message = "_logitech-reverse-bonjour._tcp.local.\n61991".dataUsingEncoding(NSUTF8StringEncoding) socket = GCDAsyncUdpSocket(delegate: self, delegateQueue: dispatch_get_main_queue()) socket.sendData(message, toHost: address, port: port, withTimeout: 1000, tag: 0) do { try socket.bindToPort(port) } catch { print(error) } do { try socket.enableBroadcast(true) } catch { print(error) } do { try socket.beginReceiving() } catch { print(error) } } func udpSocket(sock: GCDAsyncUdpSocket!, didConnectToAddress address: NSData!) { print("didConnectToAddress"); } func udpSocket(sock: GCDAsyncUdpSocket!, didNotConnect error: NSError!) { print("didNotConnect \(error)") } func udpSocket(sock: GCDAsyncUdpSocket!, didSendDataWithTag tag: Int) { print("didSendDataWithTag") } func udpSocket(sock: GCDAsyncUdpSocket!, didNotSendDataWithTag tag: Int, dueToError error: NSError!) { print("didNotSendDataWithTag") } func udpSocket(sock: GCDAsyncUdpSocket!, didReceiveData data: NSData!, fromAddress address: NSData!, withFilterContext filterContext: AnyObject!) { var host: NSString? var port1: UInt16 = 0 GCDAsyncUdpSocket.getHost(&host, port: &port1, fromAddress: address) print("From \(host!)") let gotdata: NSString = NSString(data: data!, encoding: NSUTF8StringEncoding)! print(gotdata) } } 

Cuando compilo esto, la única respuesta que recibo es el post que acabo de enviar;

 didSendDataWithTag From ::ffff:192.168.1.101 _logitech-reverse-bonjour._tcp.local. 61991 From 192.168.1.101 _logitech-reverse-bonjour._tcp.local. 61991 

Me temo que tengo un problema de comprensión conceptual con la transmisión aquí, y sinceramente espero que alguien pueda señalarme un recurso o ayudar a entender por qué no recibo ninguna respuesta del dispositivo en mi código.

¡Gracias!

Desde el aspecto del código, parece que solo ha implementado la mitad de la solución. La forma en que funciona es:

  • Se envía un post de difusión al puerto 5224. Este post incluye la cadena logitech-reverse-bonjour._tcp.local. más el número de puerto al que Harmony debería volver a conectarse; en su caso, ha codificado 61991.
  • Presumiblemente Harmony recibe este package, reconoce el post y luego inicia una connection de nuevo al dispositivo que envió la transmisión en el puerto nominado (61991 en este caso).

Como su aplicación no está escuchando en este puerto, no recibe ninguna respuesta. Esto se implementa en el file responseCollector.js en el proyecto node.js