//这是用来测试一个gethostbyname函数 用于使用域名获取ip #include<stdio.h> #include<winsock2.h> #pragma comment(lib,"WS2_32.lib") #include<Ws2tcpip.h> #pragma comment(lib,"Ws2_32.lib") #include<stdlib.h> /* struct hostent { char *h_name; //域名 char ** h_aliases; //别名 short h_addrtype; //ip类型 是v4还是v6 v4(AF_INET) short h_length; //地址长度:4 但是我的输出啥子都没得 char ** h_addr_list; //注意这玩意是一个双指针的东西 unp p240有图 }; */ int main(void) { struct hostent* ent; int i = 0 ; char *ptr = "baidu.com"; char src[32] ={0}; WSADATA wd; //win下面必须这样 因为懒得开linux所以就用vs if(WSAStartup(MAKEWORD(2,2),&wd) != 0) //WSAStartup { printf("WSAStartup error!"); system("pause"); return 1; } //检查返回值错误问题 if((ent = gethostbyname(ptr)) == NULL){ fprintf(stderr , "gethostbyname error!"); system("pause"); exit(1); } fprintf(stdout , " h_name:%s\n" , ent->h_name); while(ent->h_aliases[i]) fprintf(stdout , " h_aliases[i%d]:%s\n",i , ent->h_aliases[i++]); fprintf(stdout , "h_addrtype : %s\n" ,(ent->h_addrtype == AF_INET)?"ipv4":"ipv6"); fprintf(stdout , "h_length : %h\n" , ent->h_length); //将ent结构体中的网络字节序转成 主机字节序 InetNtop(ent->h_addrtype , ent->h_addr_list[0], src , 32); //InetNtop( if(src[0] == NULL){ fprintf(stderr , " error ! null\n"); system("pause"); exit(2); } fprintf(stdout , "h_addr: %s\n" , src); system("pause"); exit(0); }
代码说明一切 如果您发现错误或者改进的地方,请留言。不要吝啬赐教!特此感谢