10
votes

ASYNC UDP Prise à utiliser Recevoir

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 senddata: (nsdata) tohost: , ... eh bien ça marche bien.

Le pense que je ne peux pas comprendre que les fonctions de réception fonctionnent.

Je suppose quelque chose comme ceci: xxx

Je pense que cela devrait alors appeler la méthode - (bool) ONUDPSOCKED: (asyncudpsockt *) Chaussette Didreceivedata: (Nsdata *) Données avectagnes: (long) Duhost: (Nstring *) Port d'hôte: (uint16) Port

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

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é.

Si vous ne connaissez pas la réponse Merci de toute façon pour lire!


3 commentaires

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


4 Réponses :


-2
votes

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: xxx

également dans l'exemple, le serveur est démarré avec la ligne suivante: xxx p> voici un lien vers le exemple de code .


1 commentaires

Vous vous référez à la version ASYNCSocket (TCP) et non à l'asyncudpsocket (UDP) que la question initiale est à propos.



6
votes

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:

  1. Assurez-vous que la classe auto que vous initialisez lorsque votre Délégué de socket est la classe que vous attendez des rappels sur.

  2. Assurez-vous que votre classe adopte le protocole asyncudpsocketdelegate . 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:

    @interface | Votre classe | : | super classe | <| Autre protocole (s) |, asyncudpsocketdelegate> {

  3. Assurez-vous de disposer de vos méthodes de délégation déclarées dans votre Interface et 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; < / li>

  4. Essayez appeler RecevoirWithTimeout avec une valeur de délai d'attente non nulle. Peut vous donner des résultats différents.

  5. 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.


2 commentaires

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.



1
votes
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];

1 commentaires

J'ai besoin de la démo ... Plzz



0
votes

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


0 commentaires