ios中 根据域名动态获取ip地址

来源:互联网 发布:舞美娘 设计软件 编辑:程序博客网 时间:2024/04/29 20:09

为什么动态获取ip呢,

在正常的网络请求中,理论上其实访问的是ip地址,互联网中用一个ip去标识一个计算机,但是单纯的用ip访问也会引发诸如安全性或因服务器变更引发的问题,所以dns出现了,不了解dns的 可以先去了解一下dns,dns的出现解决了ip访问引发的问题,但也造成请求时间和性能上的牺牲,因为多了一个去dns系统查询特定ip的操作,拿到ip之后再去进去服务器的访问请求,

如果我们在项目中直接就可以获取到ip的话,是不是直接就省略了我们的请求到dns的时间呢,只是之前放在网络处理的部分我们放在本地完成了而已,

//根据域名 动态获取ip地址
+ (NSString*)getIPWithHostName:(const NSString*)hostName
{
const char *hostN= [hostName UTF8String];
struct hostent* phot;

@try {
phot = gethostbyname(hostN);
if (phot == nil) {
return nil;
}
}
@catch (NSException *exception) {
return nil;
}

struct in_addr ip_addr;
memcpy(&ip_addr, phot->h_addr_list[0], 4);
char ip[20] = {0};
inet_ntop(AF_INET, &ip_addr, ip, sizeof(ip));

NSString* strIPAddress = [NSString stringWithUTF8String:ip];
return strIPAddress;
}


这个方法因为引用了一些c 库中的方法,需要引入三个文件

#include <netdb.h>
#include <sys/socket.h>
#include <arpa/inet.h>


这样就可以解决了!

注:因为从dns 获取特定ip 是网络操作,所以在断网情况下获取不到ip,大家需要酌情处理


1 0
原创粉丝点击