网络编程中通过hostname获取ip的方法

一般网络编程中,大部分公司客户端请求服务端地址一般还是采用域名+访问文件的形式。

比如:www.hehe.com/request.do

但是有些公司某些因素,从测试到线上一直用的ip地址作为了请求地址。

http://212.112.xxx,xx:8080/request.do

使用域名和使用IP其实都是有各自的利弊。

因为我们都知道如果服务器换地址了,那么如果使用了ip作为address的话,本身在客户端写死了请求地址,就需要更新客户端。

使用域名则不会有如上问题。

但是使用域名便利后带来的是一个性能或者是时间上的牺牲。

其实说白了,域名就是起了一个中间者的作用,我们发起一条请求时,域名还是被解析成了ip去请求。

因此可以看出中间多了一步域名解析过程。


于是我们可以考虑下,在代码里动态的把请求地址域名换成ip地址。

简单说,这样既兼顾了两者的优点。

以下是部分根据域名获取ip地址代码

//根据域名获取ip地址
-(NSString*)getIPWithHostName:(const NSString*)hostName
{
    const char *hostN= [hostName UTF8String];
    struct hostent* phot;
    
    @try {
        phot = gethostbyname(hostN);
        
    }
    @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;
}

记得添加两个需要包含的头文件

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

最后提一点是HostName格式不要带http://.

我本来是带这个完整路径,发现获取的和我们本身服务端的ip地址不一致。

去掉后就行了。


你可能感兴趣的:(网络编程中通过hostname获取ip的方法)