几何尺寸与公差论坛

 找回密码
 注册
查看: 1869|回复: 0

【转帖】获取主机名和ip地址

[复制链接]
发表于 2008-10-27 11:38:24 | 显示全部楼层 |阅读模式
使用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)[j]);
   str += addr;
  }
  
}
    m_ipaddress=str;
UpdateData(FALSE);


}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|几何尺寸与公差论坛

GMT+8, 2024-12-22 16:39 , Processed in 0.035230 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表