正文

获取主机名和IP地址2007-09-01 15:49:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/liuwg/29038.html

分享到:

    使用gethostname和gethostbyname这两个winsock库函数实现获得主机名和IP地址,其中Gethostname获得主机名,Gethostbyname获得主机地址。这两个函数的原型为:int gethostname (  char FAR * name,    int namelen       );获得主机名 char FAR * name          指针变量,存放主机名的数组int namelen              字符串长度 struct hostent FAR * gethostbyname (  const char FAR * name  );通过主机名获取主机地址,此函数返回hostent结构体变量 const char FAR * name    就是主机名 hostent结构体struct hostent {    char FAR *       h_name;    char FAR * FAR * h_aliases;    short            h_addrtype;    short            h_length;    char FAR * FAR * h_addr_list;}; 其中,  char *h_name 表示的是主机的规范名。例如 www.google.com 的规范名其实是 www.l.google.com 。  char **h_aliases 表示的是主机的别名。 www.google.com 就是google他自己的别名。有的时候,有的主机可能有好几个别名,这些,其实都是为了易于用户记忆而为自己的网站多取的名字。  int  h_addrtype 表示的是主机ip地址的类型,到底是ipv4(AF_INET),还是ipv6(AF_INET6)  int  h_length 表示的是主机ip地址的长度  int  **h_addr_lisst 表示的是主机的ip地址,注意,这个是以网络字节序存储的。 下面给出一个例子:void CNetWorkDlg::GetIP(){ char szhostname[128];    CString str; //获得主机名 if( gethostname(szhostname, 128) == 0 ) {  // 获得主机ip地址  struct hostent * phost;  int i;  phost = gethostbyname(szhostname);        m_hostname=szhostname;  i=0;  int j;  int h_length=4;  for( j = 0; j<h_length; j++ )  {   CString addr;      if( j > 0 )    str += ".";      addr.Format("%u", (unsigned int)((unsigned    char*)phost->h_addr_list[i])[j]);   str += addr;  }   }    m_ipaddress=str; UpdateData(FALSE); }

阅读(3356) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册