Определение ip
#pragma comment(lib, "ws2_32")
CString GetIPAdress() {
HOSTENT *he = NULL;
BYTE *IP = NULL;
char name[0xFF];
gethostname(name, sizeof(name));
he = gethostbyname(name);
if(he) {
IP = (BYTE *)he->h_addr_list[0];
}
if (IP)
return ::Format(_T("%i.%i.%i.%i"), int(IP[0]), int(IP[1]), int(IP[2]), int(IP[3]));
else
return CString();
}
CString GetHostName() {
HOSTENT *he = NULL;
BYTE *IP = NULL;
char name[0xFF];
gethostname(name, sizeof(name));
he = gethostbyname(name);
return he ? he->h_name : NULL;
}
Знаю, что заезженная тема, но нашел несколько примеров и ничего не получается. Помогите...
const
bufsize = 255;
var
buf: pointer;
RemoteHost: PHostEnt; (* Не освобождайте это! *)
begin
buf := nil;
try
getmem(buf, bufsize);
winsock.gethostname(buf, bufsize); (* это может работать и без сети *)
RemoteHost := Winsock.GetHostByName(buf);
if RemoteHost = nil then
my_ip_address := winsock.htonl($07000001) (* 127.0.0.1 *)
else
my_ip_address := longint(pointer(RemoteHost^.h_addr_list^)^);
finally
if buf <> nil then
freemem(buf, bufsize);
end;
result := winsock.ntohl(result);
end;
IPaddr: TLabel;
...
uses Winsock;
...
procedure TForm1.FormCreate(Sender: TObject);
var
wVerReq: WORD;
wsaData: TWSAData;
i: pchar;
h: PHostEnt;
c: array[0..128] of char;
begin
wVerReq := MAKEWORD(1, 1);
WSAStartup(wVerReq, wsaData);
{Получаем хост (имя) компа}
GetHostName(@c, 128 );
h := GetHostByName(@c);
Host.Caption := h^.h_Name; //Host отображает хост(имя) компьютера
{Достаем IP}
i := iNet_ntoa(PInAddr(h^.h_addr_list^)^);
IPaddr.Caption := i; //Теперь IPaddr отображает IP-адрес
WSACleanup;
end;
WinSock;
function GetLocalIP: String;
const WSVer = $101;
var
wsaData: TWSAData;
P: PHostEnt;
Buf: array [0..127] of Char;
begin
Result := '';
if WSAStartup(WSVer, wsaData) = 0 then begin
if GetHostName(@Buf, 128 ) = 0 then begin
P := GetHostByName(@Buf);
if P <> nil then Result := iNet_ntoa(PInAddr(p^.h_addr_list^)^);
end;
WSACleanup;
end;
end;
#pragma comment(lib, "ws2_32")
CString GetIPAdress() {
HOSTENT *he = NULL;
BYTE *IP = NULL;
char name[0xFF];
gethostname(name, sizeof(name));
he = gethostbyname(name);
if(he) {
IP = (BYTE *)he->h_addr_list[0];
}
if (IP)
return ::Format(_T("%i.%i.%i.%i"), int(IP[0]), int(IP[1]), int(IP[2]), int(IP[3]));
else
return CString();
}
CString GetHostName() {
HOSTENT *he = NULL;
BYTE *IP = NULL;
char name[0xFF];
gethostname(name, sizeof(name));
he = gethostbyname(name);
return he ? he->h_name : NULL;
}
Поясните следующую строку return ::Format(_T("%i.%i.%i.%i"), int(IP[0]), int(IP[1]), int(IP[2]), int(IP[3]));
Знаю, что заезженная тема, но нашел несколько примеров и ничего не получается. Помогите...
Автору: советую узнать о существовании сайта http://msdn.microsoft.com на котором есть вот это: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/iphlp/iphlp/getadaptersinfo.asp
Советчикам: не изобретать лишний раз велосипед. К тому же с не очень круглыми колесами и побольше изучать тот же сайт.
ЗЫ Если не очень понятна ссылка, то могу привести рабочий пример, но хочется, что бы ты сам всё понял.
Кстати, функцию которую ты дал легче использовать. Так что еще раз спасибо.
Не только легче, но и правильнее. Потому и говорю, что ходи на msdn почаще. Еще стоит учесть, что msdn обновляется время от времени, в отличии от справки билдера и там многое не написано.
Уже заметил, а можно где-н заказать диск с msdn?
Хм... Наверное на http://microsoft.com - честно говоря, ни когда не задумывался о том, что бы его заказать. Хотел когда то купить, даже нашел в магазе, естественно пиратский :), но потом надобность в нем отпала с появлением качественного инета.