我用gethostbyname( )獲取設備的ip,在ios5中運行正常,但是在ios6中,返回的host值是空,下面就是我的代碼:
// 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針劑就不行了,不知道是怎麼回事?有沒有其他方法在ios6獲取設備ip的?謝謝指教
改用 getifaddrs + getnameinfo 可以枚舉出所有接口的ip。gethostbyname對ipv6是無效的。