J'essaie d'obtenir un programme d'exécution d'iPhone sur le simulateur. Mon problème consiste à recevoir des données UDP. J'utilise asyncrudpsocket. Si je fais une prise et utilisez Le pense que je ne peux pas comprendre que les fonctions de réception fonctionnent. p> Je suppose quelque chose comme ceci: p> Je pense que cela devrait alors appeler la méthode Eh bien, je mets un NSLog dans cette méthode et il n'est jamais appelé. Eh bien [Socket Recevoir, ..] est la seule méthode de réception, donc je suppose que cela devrait être celui-là ... ou existe-t-il une autre méthode que je dois utiliser? Ou dois-je faire quelques ajouts à mon délégué ou quoi que ce soit ... Je ne peux tout simplement pas comprendre comment je dois le faire P> J'ai cherché des exemples d'asyncrudpsocke (s), des tutoriels, comment ( 's) et plus mais je ne trouve tout simplement pas un exemple. Donc, si quelqu'un aimerait l'expliquer ou sait un siège avec une bonne explication, il serait très apprécié. P> Si vous ne connaissez pas la réponse Merci de toute façon pour lire! P> P> senddata: (nsdata) tohost: code>, ... eh bien ça marche bien.
- (bool) ONUDPSOCKED: (asyncudpsockt *) Chaussette Didreceivedata: (Nsdata *) Données avectagnes: (long) Duhost: (Nstring *) Port d'hôte: (uint16) Port Code> P>
4 Réponses :
Je ne connais pas cette bibliothèque, mais je regarde le code exemple de son projet de code Google révèle quelques éléments.
Tout d'abord, je ne vois aucune mention de ce rappel que vous décrivez. On dirait que vous êtes censé implémenter: p> également dans l'exemple, le serveur est démarré avec la ligne suivante: p>
Vous vous référez à la version ASYNCSocket (TCP) et non à l'asyncudpsocket (UDP) que la question initiale est à propos.
Je suis nouveau avec l'objectif c (alors supporte de mon ignorance de celui-ci), mais j'ai pu obtenir ASYNCudPsocketDelegate à recevoir, pour la plupart. Quelques points à essayer / confirmer: p>
Assurez-vous que la classe code> auto code> que vous initialisez lorsque votre Délégué de socket est la classe que vous attendez des rappels sur. P> LI>
Assurez-vous que votre classe adopte le protocole code> asyncudpsocketdelegate code>. Je ne sais pas si cela est réellement nécessaire, mais cela ne pouvait pas faire mal. Dans votre en-tête de classe, on dirait: P>
Assurez-vous de disposer de vos méthodes de délégation déclarées dans votre Essayez appeler Utilisez Wireshark pour vous assurer que vous êtes
en fait recevoir des données UDP quand et
où tu penses que tu es. je ne suis pas
essayer d'insulter votre intelligence,
mais j'ai passé tout à fait un moment essayer
Pour suivre les bugs de code de réseau dans
le passé quand la question était en réalité
ma configuration réseau. p> li>
ol> @interface | Votre classe | : | super classe | <| Autre protocole (s) |, asyncudpsocketdelegate> { code> p> li>
Interface et S> Mise en œuvre. La signature de méthode devrait ressembler à ceci:
- (BOOL) ONUDPESCATSCOCATT: (asyncudpsocket *) Chaussette DidreceiveData: (Nsdata *) Données avectagnes: (LONG) TAG DEHOSTHOST: (NSString *) Port d'hôte: (UINT16) Port; Code> P> < / li>
RecevoirWithTimeout code> avec une valeur de délai d'attente non nulle. Peut vous donner des résultats différents. P> li>
Si vous adoptez un protocole formel, vous n'avez pas besoin de déclarer vos méthodes d'interface. C'est ce que le protocole est pour.
@Grady a corrigé la partie sur la déclaration d'interface basée sur votre commentaire.
AsyncUdpSocket *socket=[[AsyncUdpSocket alloc]initWithDelegate:self]; //receiveWithTimeout is necessary or you won't receive anything [socket receiveWithTimeout:-1 tag:2]; //-------here NSData *data=[@"Hello from iPhone" dataUsingEncoding:NSUTF8StringEncoding]; [socket sendData:data toHost:bchost port:9003 withTimeout:-1 tag:1];
J'ai besoin de la démo ... Plzz
Je ne sais pas si cela sera utile, mais j'avais le même problème, et voici comment je l'ai réparé.
Dans mon cas, le problème était que: P>
#import "AppDelegate.h" #import "AsyncUdpSocket.h" #import <UIKit/UIKit.h> #import <CFNetwork/CFNetwork.h> @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Create the main window self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; self.window.backgroundColor = [UIColor whiteColor]; [self.window makeKeyAndVisible]; // Create a label for showing received text self.receiver = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 80.0)]; self.receiver.text = @"No message, yet!"; self.receiver.textColor = [UIColor blackColor]; [self.window addSubview:self.receiver]; // Create a button for sending messages UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; [button setFrame:CGRectMake(80.0, 210.0, 160.0, 40.0)]; [button addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside]; [button setTitle:@"Start Game" forState:UIControlStateNormal]; [button setBackgroundColor:[UIColor blueColor]]; [self.window addSubview:button]; @try { self.udpSocket = [[AsyncUdpSocket alloc] initWithDelegate:self]; if (![self.serverSocket bindToPort:9003 error:nil]) { NSLog(@"COULD NOT BIND TO PORT"); } if (![self.udpSocket enableBroadcast:YES error:nil]) { NSLog(@"COULD NOT ENABLE BROADCASTING"); } } @catch (NSException * e) { NSLog(@"Exception: %@", e); } return YES; } - (void)buttonClick:(UIButton*)button { NSData * data = [@"Hello World" dataUsingEncoding:NSUTF8StringEncoding]; [self.udpSocket receiveWithTimeout:-1 tag:0]; if (![self.udpSocket sendData:data toHost:@"127.0.0.1" port:9003 withTimeout:0.2 tag:1]) { NSLog(@"COULD NOT SEND DATA"); } else { NSLog(@"Sent packet (from %@:%d to 127.0.0.1:9001)", self.udpSocket.localHost, self.udpSocket.localPort); } } - (BOOL)onUdpSocket:(AsyncUdpSocket *)sock didReceiveData:(NSData *)data withTag:(long)tag fromHost:(NSString *)host port:(UInt16)port { NSLog(@" Received data (from %@:%d) - %@", host, port, data); self.receiver.text = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; [self.udpSocket receiveWithTimeout:-1 tag:0]; return YES; } @end
Vous devriez changer le tag "asyncsocket" sur "asyncudpsocket" et ajouter "cocoaasyncsocket"
Avez-vous déjà résolu ce problème? Sinon, dites-moi et je vous enverrai un simple projet Xcode qui utilise Bonjour et ASYNCudpsocket pour envoyer un message à partir de iOS (client) sur Mac OS X (serveur).
IM2S Pouvez-vous s'il vous plaît écrivez-moi votre projet? mon email est andreycdmd@gmail.com