Objective-C - Détermination de l'adresse IP de l'iPod touch programme
-
12-09-2019 - |
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?
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];
}