Question

Je suis actuellement en utilisant ce code

    NSHost *host = [NSHost hostWithAddress:hostname];
if (host == nil) {
    host = [NSHost hostWithName:hostname];
    if (host == nil) {
        [self setMessage:@"Invalid IP address or hostname:"];
        return;
    }
}

retrive mon adresse IP pour une application de réseau je travaille, mais je suis conscient que NSHost est une API privée qui sera rejeté. aider quelqu'un peut me avec ce code de travail pour produire les mêmes résultats sans utiliser NSHost? Je ne suis pas vraiment sûr où commencer.

EDIT:

Après des suggestions qui semblent sacrément presque parfait dessous j'ai ajouté ce code dans mon application à la place du code ci-dessus

    Boolean result;
CFHostRef hostRef;
CFArrayRef addresses;
NSString *hostname = @"www.apple.com";
hostRef = CFHostCreateWithName(kCFAllocatorDefault, (CFStringRef)hostname);
if (hostRef) {
    result = CFHostStartInfoResolution(hostRef, kCFHostAddresses, NULL); // pass an error instead of NULL here to find out why it failed
    if (result == TRUE) {
        addresses = CFHostGetAddressing(hostRef, &result);
    }
}
if (result == TRUE) {
    NSLog(@"Resolved");
} else {
    NSLog(@"Not resolved");
}

Je l'ai enlevé la 4e ligne (comme je l'ai cette information d'ailleurs déjà) mais je reçois des erreurs étant basées autour CFHostRef étant non déclaré. Comment puis-je résoudre cela? Il semble être mon seul grand obstacle, que d'autres erreurs ne sont basées sur le manque de pouvoir voir hostRef après. EDIT:. Scratch que je reçois aussi kCFHostAddresses non déclarés

Était-ce utile?

La solution 3

http://developer.apple.com/iphone/library /qa/qa2009/qa1652.html

Vous avez une grande petite réponse à travers le système de support aux développeurs, cela a fonctionné parfaitement.

Autres conseils

Vous pouvez utiliser CFHost pour obtenir le même. Sur le haut de la CFHost Référence est une recette de livre de cuisine pour faire la recherche.

Le code suivant fait même, la résolution synchrone très basique (comme le vôtre ci-dessus avec NSHost Would). Notez que vous ne voulez pas le faire, car il peut rendre votre application ne répond pas parce qu'il ne retourne pas jusqu'à ce qu'il soit résolu ou les coups de délai d'attente.

utiliser la recherche asynchrone à la place (CFHostSetClient et CFHostScheduleWithRunLoop comme décrit dans la documentation CFHost ci-dessus). En outre, selon ce que vous avez l'intention de le faire, vous pouvez regarder en utilisant les API de joignabilité. Découvrez les sessions de la WWDC sur la mise en réseau disponibles sur le site du développeur iPhone.

Boolean result;
CFHostRef hostRef;
CFArrayRef addresses;
NSString *hostname = @"www.apple.com";
hostRef = CFHostCreateWithName(kCFAllocatorDefault, (CFStringRef)hostname);
if (hostRef) {
    result = CFHostStartInfoResolution(hostRef, kCFHostAddresses, NULL); // pass an error instead of NULL here to find out why it failed
    if (result == TRUE) {
        addresses = CFHostGetAddressing(hostRef, &result);
    }
}
if (result == TRUE) {
    NSLog(@"Resolved");
} else {
    NSLog(@"Not resolved");
}

// Don't forget to release hostRef when you're done with it
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top