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 を取得する他の解決策はありますか?