BACKGROUND:Swift: Ricevere UDP con GCDAsyncUdpSocket
voglio essere in grado di inviare e ricevere pacchetti UDP tra la mia app iOS e un server. Il server esegue il richiamo di ogni messaggio in arrivo al client dell'applicazione. Il server è stato testato e confermato funzionante. Ho un StartViewController che avvia due classi che implementa GCDAsyncUdpSocketDelegate, uno per l'invio e uno per la ricezione. Il "socket di invio" funziona, il server riceve i messaggi.
PROBLEMA:
L'applicazione mai ottenere il messaggio in arrivo indietro dopo lo stato inviato. Qualcosa con l'installazione del socket di ascolto è probabilmente sbagliato dal momento che dideceeceData non viene mai chiamato.
Ho fatto completamente male?
Inizio:
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!")
}
}
ricezione:
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)");
}
}
Invia:
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: aggiunta riga di codice dimenticato.
Dove esattamente si inizializzare la vostra proprietà presa in InSocket. setupConnection? – Anton
Anton. Grazie per aver notato. Era una copia/incolla misstake del mio codice progetto, l'ho appena aggiunto. Questo non è il problema, tuttavia, poiché l'inizializzazione del socket è presente nel mio codice progetto. – rilar