#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;
}
上面代码来源于公司一个同事,先记录下来,等亲自测试下,再更新