Получить IP-адрес локального компьютера - PullRequest
47 голосов
/ 23 сентября 2008

В C ++, какой самый простой способ получить IP-адрес локального компьютера и маску подсети?

Я хочу иметь возможность определять IP-адрес локального компьютера в моей локальной сети. В моем конкретном случае у меня есть сеть с маской подсети 255.255.255.0, а IP-адрес моего компьютера - 192.168.0.5. Мне нужно, чтобы они имели два значения программно для отправки широковещательного сообщения в мою сеть (в форме 192.168.0.255, для моего конкретного случая)

Редактировать: Многие ответы не дали ожидаемых результатов, потому что у меня было два разных сетевых IP-адреса. Код Torial добился цели (он дал мне оба IP-адреса). Благодарю.

Редактировать 2: Спасибо Брайану Бонди за информацию о маске подсети.

Ответы [ 12 ]

0 голосов
/ 23 августа 2009

В DEV C ++ я использовал чистый C с WIN32, с этим фрагментом кода:

case IDC_IP:

             gethostname(szHostName, 255);
             host_entry=gethostbyname(szHostName);
             szLocalIP = inet_ntoa (*(struct in_addr *)*host_entry->h_addr_list);
             //WSACleanup(); 
             writeInTextBox("\n");
             writeInTextBox("IP: "); 
             writeInTextBox(szLocalIP);
             break;

Когда я нажимаю кнопку «Показать IP», это работает. Но во второй раз программа завершает работу (без предупреждения или ошибки). Когда я делаю:

//WSACleanup(); 

Программа не закрывается, даже нажав одну и ту же кнопку несколько раз с максимальной скоростью. Так что WSACleanup () может плохо работать с Dev-C ++ ..

0 голосов
/ 23 сентября 2008

Не могли бы вы просто отправить на INADDR_BROADCAST ? По общему признанию, это пошлет на всех интерфейсах - но это редко проблема.

В противном случае ioctl и SIOCGIFBRDADDR должны получить адрес для * nix, WSAioctl и SIO_GET_BROADCAST_ADDRESS для win32.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...