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?

¿Fue útil?

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];   
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top