С помощью какой функции можно определить свои Ip
Как программно или какой функцией можно определить Ip адреса своего компьютера?
Подскажите кто-нибудь.
Как программно или какой функцией можно определить Ip адреса своего компьютера?
Подскажите кто-нибудь.
Увы! Компилятора под рукой нет, боюсь, как бы это не возвращало нечто вроде 127.0.0.1, но в принципе попытка - не пытка, лови (из статьи по winsock, вернее по стандартным Беркли сокетам, т.к. примеры идут под *никсы):
[FONT="Verdana"][COLOR="DimGray"]4.10 gethostname() -- Кто я?
Еще проще чем getpeername(). Она возвращает имя компьютера, на котором запущена твоя программа. Имя может применяться в gethostbyname(), которая будет рассмотрена ниже, для того, чтобы определить IP адрес твоей локальной машины.
Что может быть более интересным? Я могу придумать несколько вещей, но они не относятся к сокет программингу. В любом случае, вот ее объявление:
#include «unistd.h»
int gethostname(char *hostname, size_t size);
Аргументы: hostname - это указатель на массив из char, в который далее закинется информация о имени хоста в ходе работы этой функции. size - это длина в байтах этого массива.
[/COLOR][/FONT]
или, как вариант, при использовании "голеньких" сокетов твой партнер, если память не изменяет, принимая что-либо от тебя сможет выдрать из адресной структуры твой адрес, если он конечно выступает в роли сервера, хотя что-то тут не связывается.
Как программно или какой функцией можно определить Ip адреса своего компьютера?
Подскажите кто-нибудь.
Порывшись в MSDN, нашёл функцию GetIpAddrTable.
[QUOTE=MSDN]The GetIpAddrTable function retrieves the interface–to–IP address mapping table.
PMIB_IPADDRTABLE pIpAddrTable, // buffer for mapping table
PULONG pdwSize, // size of buffer
BOOL bOrder // sort the table
);
Parameters
pIpAddrTable
Pointer to a buffer that, on successful return, contains the interface–to–IP address mapping table as a MIB_IPADDRTABLE structure.
pdwSize
Specifies the size of the buffer pointed to by the pIpAddrTable parameter. If the buffer is not large enough to hold the returned mapping table, the function sets this parameter equal to the required buffer size.
bOrder
Specifies whether the returned mapping table should be sorted in ascending order by IP address. If this parameter is TRUE, the table is sorted.
Return Values
If the function succeeds, the return value is NO_ERROR.
If the function fails, use FormatMessage to obtain the message string for the returned error.[/QUOTE]
void __fastcall TForm1::Button1Click(TObject *Sender)
{
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD(1, 0);
int err = WSAStartup(wVersionRequested, &wsaData);
if(err == 0)
{
char hn[1024];
struct hostent *adr;
if(gethostname((char *)&hn, 1024))
{
int 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]);
Label1->Caption=LocalIp; //Выводим IP адрес
}
}
}