Swift: Recevoir UDP avec GCDAsyncUdpSocket

De FOND:

Je veux être en mesure d'envoyer et de recevoir des paquets UDP entre mon application iOS et un serveur.
Le serveur renvoie l'écho de chaque message entrant pour le client de l'application. Le serveur est testé et confirmé travailler. J'ai un StartViewController qui le démarrage de deux classes qui implémente GCDAsyncUdpSocketDelegate, l'un pour l'envoi et l'autre pour la réception. L'envoi "socket" est au travail, le serveur reçoit les messages.

PROBLÈME:

L'application ne jamais obtenir le message entrant de retour après avoir été envoyé. Quelque chose avec le socket d'écoute de l'installation est probablement mal car didReceiveData jamais appelée.

Ai-je fait cela complètement faux?

Début:

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!")
   }
}

Recevoir:

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)");
   }
}

Envoyer:

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")
   }
}

Edit:
Ajouté oublié la ligne de code.

Exactement où avez-vous initialiser votre prise de propriété dans InSocket. setupConnection?
Anton. Thx pour s'en rendre compte. C'était un copier/coller misstake de mon projet de code, j'ai juste ajouté. Ce n'est pas le problème, toutefois, car le socket initialazion est là, dans mon projet de code.

OriginalL'auteur rilar | 2014-11-06