Objective-C - 以编程方式确定iPod touch的IP地址

时间:2009-07-10 19:07:14

标签: objective-c ip ip-address multicast multicastsocket

我正在为几台iPod设备编写Objective-C编程,我对此感到疑惑。我正在开发一个利用服务器 - 客户端模型的应用程序,我正在使用带有C套接字的UDP协议。是否有一个课程允许我确定iPod设备的IP地址?在谷歌搜索其他论坛后,我还没有找到任何东西。显然这个命令不起作用,但像ipAddress = self.ip这样的东西就是我想到的。我正在设置多播C套接字,我正在尝试做一个类似于ping命令的解决方法,这显然在objective-C中不存在,或者据我所知(这是有限的,因为我只是编程在至少从今年夏天开始的目标-C中。有什么建议或提示吗?

2 个答案:

答案 0 :(得分:8)

这段代码将通过遍历接口来检索它。

- (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; 
} 

答案 1 :(得分:0)

你看到了吗? http://www.appsamuck.com/day4.html。我认为正确的答案是在SDK中使用CFHost

修改
看来该项目中的源代码使用以下代码,使其成为完全无效的解决方案,除非Apple决定将NSHost放入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];   
}