Я пытаюсь получить использование IP-адреса NSHost
. С NSHost
объект я могу использовать метод адресов для доступа к массиву объектов, одним из которых является IP-адрес. Я боюсь, хотя это IP-адрес может сменить положение в массиве от одной машины до другого. Существует ли способ получить доступ к этой информации универсальным способом?
Была попытка ответить на этот вопрос в предыдущем сообщении, но поскольку Вы видите, что это терпит неудачу.
Вот мой код:
+(NSString *) ipAddress {
NSHost * h = [[[NSHost currentHost] addresses] objectAtIndex:1];
return h ;
}
Я использовал это на многих машинах без проблем.
-(void) getIPWithNSHost{
NSArray *addresses = [[NSHost currentHost] addresses];
for (NSString *anAddress in addresses) {
if (![anAddress hasPrefix:@"127"] && [[anAddress componentsSeparatedByString:@"."] count] == 4) {
stringAddress = anAddress;
break;
} else {
stringAddress = @"IPv4 address not available" ;
}
}
//NSLog (@"getIPWithNSHost: stringAddress = %@ ",stringAddress);
}
NSString *stringAddress; объявляется в другом месте
Как было сказано в ответах на вопрос, который вы упомянули выше, существует множество IP-адресов, которые может иметь одна машина. Если вы хотите именно этого, то вам лучше использовать метод names
в NSHost для получения массива имен, которые затем можно отфильтровать по суффиксу (т.е. *.lan), чтобы получить имя нужного вам узла с этим именем. В моем случае адрес .lan возвращает ip-адрес моей сети в виде точечного квадрата.
Если вы хотите найти внешний ip-адрес, то вот хороший ответ.
Мой первый ответ - предоставить частный IP-адрес, назначенный машине в частной сети, скажем, с вашего маршрутизатора.
Если вы хотите увидеть публичный IP-адрес, то есть тот, который выходит в Интернет. Обычно его назначает поставщик услуг. Вы можете посмотреть ответ Jim Dovey --> здесь
Я протестировал его, и он сработал хорошо, но прочитайте остальные комментарии и ответы, которые указывают на неоднозначность попыток получить публичный IP.