Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Узнать свой IP


Автор: RDC 2.4.2008, 13:18
Выкладываю первый корявый способ.
Код

#include <winsock2.h>

AnsiString out = "WinSock ERR";
WSADATA wsaData; 
if (!WSAStartup(WINSOCK_VERSION, &wsaData)){char chInfo[64];
   if (!gethostname(chInfo, sizeof(chInfo))) {
      hostent *sh;
      sh=gethostbyname((char*)&chInfo);
      if (sh!=NULL) {
         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);
            out = inet_ntoa(adr.sin_addr);
            nAdapter++;
         }
      }
   }
}
WSACleanup();
ShowMessage(out);

Автор: mrbrooks 2.4.2008, 13:36
Имхо к Билдеру твой вариант это не имеет ни какого отношения  smile Написано то все на сокетах. А не с помощью компонентов.  Поэтому лучше махнуть в раздел по сетям.  

Автор: UniBomb 2.4.2008, 13:43
или ещё вот так:


Код

/*...*/
Label1->Caption = "Your IP is - 127.0.0.0";
/*...*/

Автор: gta4kv 2.4.2008, 13:53
UniBomb, интересный метод)) правда не самый лучший если задача узнать IP который в инет)

Автор: UniBomb 2.4.2008, 13:54
gta4kv, Ну я ни на что не претендую.... Это код для.... скажем компьютеров, неподлюченных ни к чему))

Автор: Bima 2.4.2008, 14:27
Вот первый способ....
Код

void __fastcall TForm1::FormActivate(TObject *Sender)
{
//*************Параметры компьютера**************
char NameComputer[MAX_COMPUTERNAME_LENGTH+1];
unsigned long NameComputerLen=MAX_COMPUTERNAME_LENGTH+1;
GetComputerName(NameComputer,&NameComputerLen);
PWname->Caption=NameComputer;
PWHost->Caption=Serv1->LocalIP;
}
//---------------------------------------------------------------------------

вот часть загаловочного файла
TNMMSGServ *Serv1;

Вот второй способ, хотя он почти один в один, как в шапке, но есть небольшие различия:
Код

void __fastcall TForm1::FormActivate(TObject *Sender)
{
//***************** Определение IP компа *****************
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(1, 0);
err = WSAStartup(wVersionRequested, &wsaData);
if(err == 0)
   {
   char hn[1024];
   struct hostent *adr;
   if(gethostname((char *)&hn, 1024))
      {
      err = WSAGetLastError();
      Beep();
      //Здесь используем код ошибки
      }
   adr = gethostbyname(hn);
   if(adr)
      {
      char *LocalIp = new char[15];
      sprintf(LocalIp,"%d.%d.%d.%d",
      (unsigned char)adr->h_addr_list[0][0],
      (unsigned char)adr->h_addr_list[0][1],
      (unsigned char)adr->h_addr_list[0][2],
      (unsigned char)adr->h_addr_list[0][3]);
      Panel1->Caption=LocalIp; //Выводим IP адрес
      }
   }
else
   {
   ShowMessage("Ошибка");
   }
}
//---------------------------------------------------------------------------

Автор: akaGreg 5.4.2008, 17:13
А ещё можно вот таким способом:
Сделайте вот такой файл:
Код

#include <winsock2.h>


Затем уже сам код:
Код

AnsiString out = "WinSock ERR";
WSADATA wsaData; 
if (!WSAStartup(WINSOCK_VERSION, &wsaData)){char chInfo[64];
if (!gethostname(chInfo, sizeof(chInfo)))
{
hostent *sh;
sh=gethostbyname((char*)&chInfo);
if (sh!=NULL)
{
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);
out = inet_ntoa(adr.sin_addr);
nAdapter++;
}
}
}
}
WSACleanup();
ShowMessage(out);

Автор: Dmi3ev 6.4.2008, 13:35
разместить компонент Powersock1
Код

ShowMessage(Powersock1->LocalIP);


Добавлено через 35 секунд
по-моему так, если ничего не путаю)))

Добавлено через 1 минуту и 17 секунд
он во вкладке FastNet, по-моему)))

Автор: RDC 15.4.2008, 00:44
2 Dmi3ev

Да чувак, это то что нужно. Спасибо тебе. 

Автор: popapo 25.4.2008, 20:44
А как можно WAN IP узнать?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)