Question

Je suis la programmation en Objective-C pour plusieurs appareils iPod et je me demandais quelque chose. Je développe une application qui utilise le modèle client-serveur et j'utilise le protocole UDP avec les sockets C. Y at-il une classe là-bas qui me permet de déterminer l'adresse IP des périphériques iPod? Après googler autour d'autres forums, je ne l'ai pas trouvé quoi que ce soit. Il est évident que cette commande ne fonctionnerait pas, mais quelque chose comme ipAddress = self.ip est ce que j'avais à l'esprit. J'installe des prises C multicast et je suis en train de faire une solution de contournement qui ressemble à la commande ping, qui évidemment n'existe pas en Objective-C soit ou à ma connaissance (qui est limitée, comme je l'ai seulement été la programmation en C objectif depuis le début de cet été) au moins. Des conseils ou des conseils?

Était-ce utile?

La solution

Cet extrait de code récupérer en boucle à travers les interfaces.

- (NSString *)getIPAddress 
{
    NSString *address = @"error";
    struct ifaddrs *interfaces = NULL;
    struct ifaddrs *temp_addr = NULL;
    int success = 0;

    // retrieve the current interfaces - returns 0 on success
    success = getifaddrs(&interfaces);
    if (success == 0)  
    {
        // Loop through linked list of interfaces
        temp_addr = interfaces;
        while(temp_addr != NULL)  
        {
            if(temp_addr->ifa_addr->sa_family == AF_INET)
            {
                // Check if interface is en0 which is the wifi connection on the iPhone  
                if([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"])  
                {
                    // Get NSString from C String
                    address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];
                }
            }
            temp_addr = temp_addr->ifa_next;
        }
    }

    // Free memory
    freeifaddrs(interfaces); 
    return address; 
} 

Autres conseils

Avez-vous vu cela? http://www.appsamuck.com/day4.html . Je pense que la bonne réponse est d'utiliser CFHost dans le SDK.

EDIT Il semble que la source dans ce projet est en utilisant le code suivant, ce qui en fait une solution totalement invalide , sauf si Apple décide de mettre NSHost dans le SDK.

-(NSString*)getAddress {  
    char iphone_ip[255];  
    strcpy(iphone_ip,"127.0.0.1"); // if everything fails  
    NSHost* myhost =[NSHost currentHost];  
    if (myhost)  
    {  
        NSString *ad = [myhost address];  
        if (ad)  
            strcpy(iphone_ip,[ad cStringUsingEncoding: NSISOLatin1StringEncoding]);  
    }  
    return [NSString stringWithFormat:@"%s",iphone_ip];   
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top