获取设备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;
}

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值