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++; }