我使用 gethostbyname() 来获取设备 IP。在 iOS5 中,它运行良好。但是在 iOS6 中,gethostbyname() 返回的主机值是 NULL。下面是我获取设备当前本地 IP 的代码。
// retun the host name
- (NSString *)hostname
{
char baseHostName[256];
int success = gethostname(baseHostName, 255);
if (success != 0) return nil;
baseHostName[255] = '\0';
#if !TARGET_IPHONE_SIMULATOR
return [NSString stringWithFormat:@"%s.local", baseHostName];
#else
return [NSString stringWithFormat:@"%s", baseHostName];
#endif
}
// return IP Address
- (NSString *)localIPAddress
{
struct hostent *host = gethostbyname([[self hostname] UTF8String]);
if (!host) {
herror("resolv");
return nil;
}
struct in_addr **list = (struct in_addr **)host->h_addr_list;
return [NSString stringWithCString:inet_ntoa(*list[0]) encoding:NSUTF8StringEncoding];
}
请注意,模拟器适用于 iOS5 和 iOS6。只有 iOS6 设备失败。gethostbyname() 有什么区别?或者你有什么其他解决方案可以在 iOS6 中获取本地 ip?