Итак, задача получить свой IP адрес. Для начала надо получить имя локального хоста. Мы это делали. "Шаг 3 - Получение имени хоста" имея имя хоста можно получить IP адрес, воспользовавшись функцией gethostbyname(). Давайте посмотрим:
// TestB.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "winsock2.h" #include "iostream.h" #pragma comment(lib,"wsock32.lib") void main() { WSADATA wsaData; if (!WSAStartup(WINSOCK_VERSION, &wsaData)) { char chInfo[64]; if (!gethostname(chInfo,sizeof(chInfo))) { cout << chInfo << endl; hostent *sh; sh=gethostbyname((char*)&chInfo); if (sh!=NULL) { cout << sh->h_name << endl; int nAdapter = 0; while ( sh->h_addr_list[nAdapter] ) { struct sockaddr_in adr; memcpy(&adr.sin_addr,sh->h_addr_list[nAdapter],sh->h_length); cout << inet_ntoa(adr.sin_addr) << endl; nAdapter++; } } } else cout << "Error local host " << endl; } else cout << "Winsock initial Bad !!!!" << endl; WSACleanup(); }
Ничего особенного кроме того, что h_addr_list - это указатель на массив указателей адресов и адрес нужно преобразовать в привычный вид через inet_ntoa().