Swift: recibe UDP con GCDAsyncUdpSocket

FONDO:

Quiero poder enviar y recibir packages UDP entre mi aplicación iOS y un server. El server hace eco de todos los posts entrantes para el cliente de la aplicación. El server se testing y confirma el funcionamiento . Tengo un StartViewController que inicia dos classs que implementa GCDAsyncUdpSocketDelegate, una para enviar y otra para recibir. El "zócalo de envío" está funcionando, el server recibe los posts.

PROBLEMA:

La aplicación nunca recupera el post entrante después de que se envió. Algo con la configuration del zócalo de escucha probablemente sea incorrecto ya que didReceiveData nunca se llama.

¿He hecho esto completamente mal?

Comienzo:

class StartViewController: UIViewController { var inSocket : InSocket! var outSocket : OutSocket! override func viewDidLoad() { super.viewDidLoad() inSocket = InSocket() outSocket = OutSocket() } @IBAction func goButton(sender: UIButton) { outSocket.send("This is a message!") } } 

Recibir:

 class InSocket: NSObject, GCDAsyncUdpSocketDelegate { let IP = "255.255.255.255" let PORT:UInt16 = 5556 var socket:GCDAsyncUdpSocket! override init(){ super.init() setupConnection() } func setupConnection(){ var error : NSError? socket = GCDAsyncUdpSocket(delegate: self, delegateQueue: dispatch_get_main_queue()) socket.bindToPort(PORT, error: &error) socket.enableBroadcast(true, error: &error) socket.joinMulticastGroup(IP, error: &error) socket.beginReceiving(&error) } func udpSocket(sock: GCDAsyncUdpSocket!, didReceiveData data: NSData!, fromAddress address: NSData!, withFilterContext filterContext: AnyObject!) { println("incoming message: \(data)"); } } 

Enviar:

 class OutSocket: NSObject, GCDAsyncUdpSocketDelegate { let IP = "90.112.76.180" let PORT:UInt16 = 5556 var socket:GCDAsyncUdpSocket! override init(){ super.init() setupConnection() } func setupConnection(){ var error : NSError? socket = GCDAsyncUdpSocket(delegate: self, delegateQueue: dispatch_get_main_queue()) socket.connectToHost(IP, onPort: PORT, error: &error) } func send(message:String){ let data = message.dataUsingEncoding(NSUTF8StringEncoding) socket.sendData(data, withTimeout: 2, tag: 0) } func udpSocket(sock: GCDAsyncUdpSocket!, didConnectToAddress address: NSData!) { println("didConnectToAddress"); } func udpSocket(sock: GCDAsyncUdpSocket!, didNotConnect error: NSError!) { println("didNotConnect \(error)") } func udpSocket(sock: GCDAsyncUdpSocket!, didSendDataWithTag tag: Int) { println("didSendDataWithTag") } func udpSocket(sock: GCDAsyncUdpSocket!, didNotSendDataWithTag tag: Int, dueToError error: NSError!) { println("didNotSendDataWithTag") } } 

Editar: se agregó la línea de código olvidada.

Finalmente conseguí que funcione con esta configuration de socket:

 func setupConnection(){ var error : NSError? socket = GCDAsyncUdpSocket(delegate: self, delegateQueue: dispatch_get_main_queue()) socket.bindToPort(PORT, error: &error) socket.connectToHost(SERVER_IP, onPort: PORT, error: &error) socket.beginReceiving(&error) send("ping") } func send(message:String){ let data = message.dataUsingEncoding(NSUTF8StringEncoding) socket.sendData(data, withTimeout: 2, tag: 0) }