0

-je utiliser mon application pour recevoir des données en utilisant cette méthode:Erreur lors de la comparaison NSString générée à partir NSUTF8StringEncoding

-(void)udpSocket:(GCDAsyncUdpSocket *)sock didReceiveData:(NSData *)data 
fromAddress:(NSData *)address withFilterContext:(id)filterContext { 
    NSLog(@"didReceiveData"); 
    NSString* input = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
    NSLog(@"%@", input); 
    if ([input isEqual:@"LEDCube"]) { 
     //do something 
    } 

Même si je vous envoie « LEDCube », l'instruction if renvoie toujours 0, qui me rend incapable d'aller plus loin. A partir de NSLog, le contenu de l'entrée est "LEDCube". Par conséquent, je soupçonne que le problème est au NSUTF8StringEncoding. Comment faire face à ce problème?

Merci à l'avance

+1

Je pense que votre réseau est fondamentalement cassé que vous faites l'hypothèse que les données seront livrées dans les mêmes morceaux que vous les avez envoyés. Ce n'est pas comme ça que ça fonctionne et vous devez construire un paquet * au niveau de l'application * et collecter les données jusqu'à ce qu'un paquet complet soit reçu et que * seulement * commence à l'analyser. Cela signifie normalement l'envoi d'une valeur * packet size * suivie de la charge utile. – trojanfoe

+0

oh intéressant. Dans mon autre programme, j'utilise sendto() de winsock dans Windows. Cela signifie donc que je dois envoyer des informations supplémentaires de mon autre programme? –

+0

Oui. Cela fonctionnera très bien la plupart du temps, mais pas à chaque fois. – trojanfoe

Répondre

-1

utilisation isEqualToString au lieu de isEqual

if ([input isEqualToString:@"LEDCube"]) { 
    //do something 
} 
+0

Il n'y a pas de différence. – trojanfoe

+0

j'ai essayé ça –