查询本地主机名及IP

modico

#define NAME_LEN 256
CString strHostName; // 主机名
CString strIP; // IP
WSADATA wsaData;
PHOSTENT pHostEnt;
char name[NAME_LEN];
BOOL bOK = FALSE;
if ( WSAStartup( 2, &wsaData ) == 0 && LOBYTE( wsaData.wVersion ) >= 1 )
{
if ( gethostname( name, NAME_LEN ) == 0 )
{
if ( ( pHostEnt = gethostbyname( name ) ) != NULL )
{
strIP = inet_ntoa( *((struct in_addr*)pHostEnt->h_addr) );
strHostName = pHostEnt->h_name;
bOK = TRUE;
}
}
WSACleanup();
}
if ( bOK )
AfxMessageBox("Host Name: "+strHostName+"\n\nIP: "+strIP);

一个有意思的想法是,我直接把 name 用 "localhost" 替换会如何?是不是可以省去 gethostname 这一步。但是,实际上,当我这样做时,strIP = "127.0.0.1"。
还有要说明的一点是,h_addr 好象不是 HOSTENT 结构的成员,因为它里面只有 h_addr_list。而实际上,h_addr 是一个宏,它相当于是 h_addr_list[0]。顺便说明一下 h_addr_list[x] 的结构:前4个字节就是实际的IP地址,其后跟着主机名的字串,这个字串又是跟h_name相同的。当安装有多个网卡时,可以根据h_addr_list 是否为0来判断列表是否结束。
※编辑: modico 于 2000-12-13 15:34:03 在 [202.117.82.2] 编辑本文

欲求无限
立地成佛
.
有时候
交谈变得空洞
沉默却像沟通
101011011111
还以为是网络命令呢?