整容说文库 > 程序代码 > 教育资讯

linux环境下gethostbyname函数问题

来源:学生作业帮助网 编辑:整容说文库 时间:2019/09/15 21:52:25 程序代码
linux环境下gethostbyname函数问题程序代码
写了个测试程序如下
   
  struct   hostent   *hp; 
 char AlarmDevIP[20];   
        int x2;

hp = gethostbyname("www.google.com");
if (hp)
{
    for(x2=0;hp->h_addr_list[x2];++x2) 
   {
             strcpy(AlarmDevIP,inet_ntoa(*(struct   in_addr*)hp->h_addr_list[x2]));   
           }   
           printf("%s", AlarmDevIP);
}
else
{
    printf("get host by name error\n");
}

发现得到的结果总是 error,请问这个函数对程序所在的环境有要求,我测试环境在公司内网,要通过网关才能到外网的,另外呢知道这个函数的实现是怎么个过程吗?谢谢!
没有初始化
int main( void )
{
WSADATA wsadata;
WSAStartup(MAKEWORD(2,2),&wsadata);
struct  hostent  *hp; 
char AlarmDevIP[20];  
int x2; 

hp = gethostbyname("www.google.com"); 
if (hp) 

for(x2=0;hp->h_addr_list[x2];++x2) 

strcpy(AlarmDevIP,inet_ntoa(*(struct  in_addr*)hp->h_addr_list[x2]));  
}  
printf("%s", AlarmDevIP); 

else 

printf("get host by name error\n"); 

    return 0;
}
#include <netdb.h>
#include <sys/socket.h>
int main(int argc, char **argv)
{
char *ptr,**pptr;
struct hostent *hptr;
char str[32];
/* 取得命令后第一个参数,即要解析的域名或主机名 */
ptr = argv[1];
/* 调用gethostbyname()。调用结果都存在hptr中 */
if( (hptr = gethostbyname(ptr) ) == NULL )
{
printf("gethostbyname error for host:%s\n", ptr);
return 0; /* 如果调用gethostbyname发生错误,返回1 */
}
/* 将主机的规范名打出来 */
printf("official hostname:%s\n",hptr->h_name);
/* 主机可能有多个别名,将所有别名分别打出来 */
for(pptr = hptr->h_aliases; *pptr != NULL; pptr++)
printf(" alias:%s\n",*pptr);
/* 根据地址类型,将地址打出来 */
switch(hptr->h_addrtype)
{
case AF_INET:
case AF_INET6:
pptr=hptr->h_addr_list;
/* 将刚才得到的所有地址都打出来。其中调用了inet_ntop()函数 */
for(;*pptr!=NULL;pptr++)
printf(" address:%s\n", inet_ntop(hptr->h_addrtype, *pptr, str, sizeof(str)));
break;
default:
printf("unknown address type\n");
break;
}
return 0;


gethostbyname可到INCLUDE文件查函数原型
To wanjingwei:
       
   我的程序是在linux下运行,不需要那个Windows下的初始化函数

To pengdaimin0
   
   你贴的程序好像在gethostbyname函数使用上没什么区别吧?
你的测试环境ping www.google.com行不行?
resolve.conf要配nameserver才能解析域名
程序代码