Objective-C - Determinación de la dirección IP del iPod touch mediante programación
-
12-09-2019 - |
Pregunta
Estoy de programación en Objective-C para varios dispositivos iPod y me preguntaba sobre algo. Estoy desarrollando una aplicación que utiliza el modelo cliente-servidor y estoy usando el protocolo UDP con tomas C. ¿Hay una clase por ahí que me permite determinar la dirección IP de los dispositivos iPod? Tras Google alrededor de otros foros, no he encontrado nada. Obviamente, este comando no funcionaría, pero algo así como ipAddress = self.ip es lo que tenía en mente. Soy la creación de sockets de multidifusión C y yo estoy tratando de hacer una solución alternativa que se asemeja el comando ping, lo que obviamente no existe en Objective-C o sea, que yo sepa (que es limitada, ya que sólo he estado programando en Objective-C desde el comienzo de este verano) como mínimo. Cualquier consejo o consejos?
Solución
Este fragmento de código lo recuperará por bucle a través de las 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;
}
Otros consejos
¿Has visto esto? http://www.appsamuck.com/day4.html . Creo que la respuesta correcta es utilizar CFHost
en el SDK.
Editar
Al parecer, la fuente en ese proyecto está usando el siguiente código, , que hace que sea una solución completamente inválida a menos que Apple decide poner NSHost
en el 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];
}