正文

获取主机名和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);

}

阅读(3202) | 评论(0)


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

评论

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