Je programme en objectif C pour plusieurs appareils iPod et je me posais des questions à propos de quelque chose. Je développe une application qui utilise le modèle client-serveur et j'utilise le protocole UDP avec des sockets C. Y at-il une classe là-bas qui me permet de déterminer l'adresse IP des appareils iPod? Après avoir parcouru d'autres forums, je n'ai rien trouvé. Évidemment, cette commande ne fonctionnerait pas, mais quelque chose comme ipAddress = self.ip est ce que j'avais en tête. Je configure des sockets multicast C et j'essaye de faire une solution qui ressemble à la commande ping, qui n'existe pas non plus dans l'objective-C ni à ma connaissance (ce qui est limité, car j'ai seulement programmé en objectif-C depuis le début de cet été) au moins. Des conseils ou des astuces?Objective-C - Détermination par programme de l'adresse IP de l'iPod touch
Répondre
Cet extrait de code le récupèrera en passant par 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;
}
Vous ne voyez pas? http://www.appsamuck.com/day4.html. Je pense que la bonne réponse est d'utiliser CFHost
dans le SDK.
EDIT
Il apparaît la source dans ce projet est en utilisant le code suivant, ce qui en fait une solution totalement invalide moins qu'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];
}
C'est la première chose qui a sauté dans ma tête, et – ryansstack
NSHost est pas pris en charge par le SDK iPhone. Ce serait génial si c'était le cas. –
NSHost est pris en charge par le SDK iPhone! – user200654
Commencez par tester et exécutez le code, puis postez le code complet. Je reçois des warings et des erreurs du code ci-dessus. avertissement: déclaration implicite de la fonction 'getifadrs' erreur: pointeur de déréférencement au type incomplet pour (temp_addr! = NULL) et quelques autres erreurs. – Biranchi
Vous n'avez pas inclus les en-têtes appropriés. Comprenez d'abord le code avant de le copier et de le coller sur le mur de la salle de bain. –
Quelqu'un veut-il nous inciter à savoir ce que sont les en-têtes appropriés? – AddisDev