获取设备ip

#include <netdb.h>
#include <arpa/inet.h>
-(NSString*)getHostIP
{
//获取本机host的名称
    char hostName[256];
    int getHostSuccess=gethostname(hostName, 255);
    NSAssert(!getHostSuccess,@"get host name error");
    hostName[255]='\0';
    struct addrinfo  *res0, *res;
    NSString* hostIP=nil;
//获取本机的addr_info,结果存储在第四个参数中
    int gai_error=getaddrinfo(hostName, NULL, NULL, &res0);
    NSAssert(!gai_error,@"get addr info error");
    for(res=res0;res;res=res->ai_next){
        if(res->ai_family==AF_INET){
/*将addr_info类型转化为sockaddr_in类型,
然后获取类型为in_addr的sin_addr(in_addr类型其实为uint32,ip地址为4个最大为255的整数,恰好是32位)
最后通过inet_ntoa将其转换为ip地址的字符串表示
*/
                struct sockaddr_in* change=(struct sockaddr_in*)res->ai_addr;
            hostIP=[NSString stringWithUTF8String:inet_ntoa(change->sin_addr)];
            break;
        }
    }
    return hostIP;
}

上面代码来源于公司一个同事,先记录下来,等亲自测试下,再更新


你可能感兴趣的:(struct,String,测试,null,存储,include)