AsyncUdpSocket comment utiliser recevoir
Je suis en train de mettre en place un programme pour iPhone en cours d'exécution sur le simulateur. Mon problème est avec la réception de données UDP. J'utilise asyncUdpSocket. Si je fais une prise secteur et utiliser sendData:(NSData) toHost:
,... eh bien, il fonctionne très bien.
Le pense, je peux juste pas à comprendre c'est comment les fonctions de réception des œuvres.
Je suppose quelque chose comme ceci:
socket = [[AsyncUdpSocket alloc] initWithDelegate:self];
[socket bindToPort:8000] error:nil] //returns YES
[socket receiveWithTimeout:-1 tag:1];
Je crois qu'il faut ensuite appeler la méthode -(BOOL)onUdpSocket:(AsyncUdpSocket *)sock didReceiveData:(NSData *)data withTag:(long) fromHost:(NSString *)host port:(UInt16)port
Bien j'ai mis un NSLog dans cette méthode et elle n'est jamais appelée. [Socket receive,..] est la seule méthode de réception donc je suppose que ce doit être celle-là... ou est-il une autre méthode que j'ai utiliser? Ou dois-je faire quelques ajouts à mon délégué ou quoi que... je ne peux pas comprendre comment je dois faire
J'ai cherché asyncUdpSocket exemple(s), des tutoriels, comment (s') en plus, mais je ne peux pas trouver un exemple. Donc, si quelqu'un voudrais l'expliquer ou connaît un s'asseoir avec une bonne explication, il serait très apprécié.
Si vous ne connaissez pas la réponse, merci quand même pour la lecture!
source d'informationauteur Saren Inden
Vous devez vous connecter pour publier un commentaire.
Je suis nouveau avec Objective C (ours avec mon ignorance), mais j'ai été en mesure d'obtenir AsyncUdpSocketDelegate de recevoir, pour la plupart. Quelques choses à essayer/confirmer:
Assurez-vous que le
self
classe que vous sont en cours d'initialisation que votre prise est la déléguée de la classe que vous attendez de l'rappels sur.Assurez-vous que votre classe adopte le
AsyncUdpSocketDelegate
protocole. Je ne suis pas sûr si cela est réellement nécessaire, mais il ne pouvait pas faire de mal. Dans votre en-tête de classe, ressemble:@interface |your class| : |super class| <|Other protocol(s)|, AsyncUdpSocketDelegate> {
Assurez-vous d'avoir votre délégué des méthodes déclarées dans votre
interfacela mise en œuvre. La signature de la méthode devrait ressembler à ceci:- (BOOL)onUdpSocket:(AsyncUdpSocket *)sock didReceiveData:(NSData *)data withTag:(long)tag fromHost:(NSString *)host port:(UInt16)port;
Essayez d'appeler
receiveWithTimeout
avec un zéro valeur de délai d'expiration. Peut vous donner des résultats différents.Utiliser Wireshark pour assurez-vous que vous êtes
en fait, la réception de données UDP quand et
où vous pensez que vous êtes. Je ne suis pas
essayer d'insulter votre intelligence,
mais j'ai passé un bon moment à essayer
pour traquer les bugs dans le code réseau
le passé, lorsque la question a été effectivement
ma configuration réseau.
Ne sais pas si ce sera utile, mais j'ai eu le même problème, et voici comment je l'ai corrigé.
Dans mon cas, le problème est que:
est situé dans le "mauvais" endroit.
Si vous appelez [auto.prise receiveWithTimeout:-1 tag:0]; dans la méthode didFinishLaunchingWithOptionsla prise ne fonctionne pas, indépendamment de ce que vous faites (même si vous essayez de le lancer dans un nouveau thread). Pour résoudre ce problème, j'ai fait un bouton et déplacé le receiveWithTimeout appel à une méthode appelée lorsque le bouton est cliqué. Ma conjecture est que ASyncUdpSocket n'aime pas quelque chose à propos de la manipulation du fil dans didFinishLaunchingWithOptions.
J'ai posté mon travail exemple de code ci-dessous (en utilisant XCode 5.1.1). Les présentes constituent l'intégralité de l'AppDelegate les fichiers de mon projet Xcode.
AppDelegate.h
AppDelegate.m
Espère que c'est utile à quelqu'un.
Je ne suis pas familier avec cette bibliothèque, mais de regarder les exemples de code à partir de leur compte Google Code du Projet révèle un certain nombre de choses.
D'abord, je ne vois aucune mention de ce rappel que vous décrivez. On dirait que vous êtes censé mettre en œuvre:
Également dans l'exemple, le serveur est démarré avec la ligne suivante:
Voici un lien vers le exemple de code.