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.
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
Vous devez vous connecter pour publier un commentaire.
J'ai enfin réussi à le faire fonctionner avec cette prise d'installation:
Désolé de ré-ouvrir un vieux thread, mais je suis en train de convertir votre exemple de fonction avec Swift 2.1, et je suis un peu confus quant à ce que le
SERVER_IP
vous faites référence dans votre réponse vraiment se réfère. Je n'arrive pas à trouver qui a instancié n'importe où.Désolé de ne pas être plus clair à ce sujet, SERVER_IP est une chaîne de caractères.
Merci @rilar. J'avais fait l'amour pour voir plus de la version révisée du code, si jamais vous êtes prêt à partager. Je n'étais pas clair si le
setupConnection()
de cette réponse faisait partie de la InSocket ou OutSocket de la classe, ou exactement où SERVER_IP est instanciée.J'ai cherché longtemps une solution pour envoyer des données UDP. Cela m'a aidé, Merci!. Maintenant, je veux savoir comment je peux lire la Réponse du Serveur. Il n'y a que outSocket.réponse() la méthode mais je ne sais pas comment l'utiliser! Quelqu'un peut m'aider. J'ai vu le serveur est de répondre via WireShark mais ne pas le recevoir dans ma demande.
OriginalL'auteur rilar
Apple Swift version 4.2.1 Bien Testé UDP Exemple:-
ÉTAPE 1 :-
pod 'CocoaAsyncSocket'
ÉTAPE 2 :-
import CocoaAsyncSocket
dans votreUIViewController
.ÉTAPE 3 :-
UIViewController
ÉTAPE 4 :- Reciving Socket
ÉTAPE 5 :- l'Envoi de Socket..
ÉTAPE 6 :- Votre Signal Données qui vous Envoyer/Recevoir
OriginalL'auteur Abhimanyu Rathore