Шаг 19 - Получение своего IP адреса

Итак, задача получить свой 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().


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 12.02.2001