CString strLocalIP;
char szHostName[64];
memset(szHostName, 0x00, sizeof(szHostName));
gethostname(szHostName, sizeof(szHostName));
PHOSTENT pHost = gethostbyname(szHostName);
if (pHost == NULL)
{
strLocalIP = _T("");
}
else
{
char* *pAddrList;
pAddrList = pHost->h_addr_list; // 顾名思义,h_addr_list,就是地址列表,因为一个机器可以有多个IP地址,所以叫做列表
strLocalIP = inet_ntoa(*((in_addr*)(*pAddrList))); // 结构体转换用指针形式,如果把pAddrList看做数组的话,等于取的pAddrList[0]
}
基于上面的理论,获取机器的多个IP可以这样:
char **addr_list = pHost-> h_addr_list;
while(addr_list[i] != NULL)
{
CStrint strAddr = inet_ntoa(*((LPIN_ADDR)addr_list[i]));
i++;
}