Objective-C - Determinar o endereço IP do iPod touch programaticamente
-
12-09-2019 - |
Pergunta
Eu estou programação em Objective-C para vários dispositivos iPod e eu estava pensando sobre alguma coisa. Estou desenvolvendo um aplicativo que utiliza o modelo cliente-servidor e eu estou usando o protocolo UDP com soquetes C. Existe uma classe lá fora que me permite determinar o endereço iPod dispositivos IP? Após pesquisando em torno de outros fóruns, eu não encontrei nada. Obviamente, este comando não iria funcionar, mas algo como ipAddress = self.ip é o que eu tinha em mente. Eu sou a criação de bases C multicast e eu estou tentando fazer uma solução que se assemelha o comando ping, o que obviamente não existe em Objective-C quer ou para o meu conhecimento (que é limitada, como eu só estive programação em Objective-C desde o início deste verão), pelo menos. Qualquer conselho ou dicas?
Solução
Este trecho de código irá recuperá-la por looping através das 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;
}
Outras dicas
Você viu isso? http://www.appsamuck.com/day4.html . Acho que a resposta certa é usar CFHost
no SDK.
Editar
Parece que a fonte em que o projeto está usando o código a seguir, o que o torna uma solução completamente inválido a menos que a Apple decide colocar NSHost
no 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];
}