gethostname方法,gethostbyname头文件

  gethostname方法,gethostbyname头文件

  Gethostbyname用法-leesphone的专栏-博客频道-CSDN。网

  Gethostbyname用法

  分类:

  传输控制协议

  软件工程师

  2008-03-02 10:26

  4050人阅读

  评论(21)

  收集

  要报告此事,您必须首先包含2个头文件:

  #包含netdb.h

  #包含sys/socket.h

  struct hostent * gethostbyname(const char * name);

  这个函数传入的值是域名或者主机名,比如 www.google.com , wpc 等等。

  传出值,它是hostent的一个结构(如下)。如果函数调用失败,将返回NULL。

  结构主机{

  char * h _ name

  char * * h _ aliases

  int h _ addrtype

  int h _长度;

  char * * h _ addr _ list

  };

  解释这种结构,其中:

  Char *h_name表示主机的规范名称。例如,www.google.com的规范名称实际上是www.l.google.com。

  Char **h_aliases表示主机的别名。是www.google.com,他自己的化名。有时,一些主机可能有几个别名。这些实际上是他们网站更多的名字,为了让用户容易记住。

  Int h_addrtype表示主机ip地址的类型,是ipv4(AF_INET)还是ipv6(AF_INET6)

  Int h_length表示主机ip地址的长度。

  Int **h_addr_lisst表示主机的ip地址。请注意,这是按照网络字节顺序存储的。千万不要用printf带%s参数直接打这个东西,会有问题。所以要真正打印出这个IP,需要调用inet_ntop()。

  const char *inet_ntop(int af,const void *src,char *dst,socklen_t cnt):

  这个函数将af类型的网络地址结构src转换成一个主机序列字符串,并将其存储在一个长度为cnt的字符串中。

  这个函数实际上返回一个指向dst的指针。如果函数调用错误,返回值为NULL。

  以下是套路,有详细评论。

  #包含netdb.h

  #包含sys/socket.h

  int main(int argc,char **argv)

  {

  char *ptr,* * pptr

  struct hostent * hptr

  char string[32];

  /*获取命令后的第一个参数,即要解析的域名或主机名*/

  ptr=argv[1];

  /*调用gethostbyname()。调用结果都存储在hptr */中

  if((hptr=gethostbyname(ptr))==NULL)

  {

  printf(主机的gethostbyname错误:%s/n ,ptr);

  返回0;/*如果调用gethostbyname时出错,则返回1 */

  }

  /*键入主机的规范名称*/

  printf(官方主机名:%s/n ,hptr-h _ name);

  /*主机可能有多个别名,请分别键入它们*/

  for(pptr=hptr-h _ aliases;*pptr!=NULLpptr)

  printf(别名:%s/n ,* pptr);

  /*根据地址类型键入地址*/

  开关(hptr- h_addrtype)

  {

  案例AF_INET:

  案例AF_INET6:

  pptr=hptr-h _ addr _ list;

  /*把你刚得到的所有地址都打出来。其中inet_ntop()函数*/

  for(;*pptr!=NULLpptr)

  printf(地址:%s/n ,inet_ntop(hptr- h_addrtype,*pptr,str,sizeof(str)));

  打破;

  默认值:

  printf(未知地址类型/n );

  打破;

  }

  返回0;

  }

gethostname方法,gethostbyname头文件