Delphirus - прграммирование на delphi
   Все о delphi Delphirus - прграммирование на delphi
blocks.gif
Навигация
 

Главная
Статьи
Базы данных
Графика
Защита
Интернет
Система
Тексты
Мультимедиа
Файлы
Формы и окна
Другое
Советы
Базы данных
Графика
Интернет
Мультимедиа
Система
Тексты
Файлы
Файлы
Исходники
Компоненты
Инфо
Поиск по сайту
Обратная связь
Самое популярное
Аккаунт
Карта сайта

 
 
 

Советы по delphi \ Интернет и сети \ TCP/IP \ Определение своего IP адреса

Определение своего IP адреса

function my_ip_address: longint;
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;

Вначале возвращается локальный сетевой адрес компьютера, а затем, если он не равен 127.0.0.1, стандартный IP адрес.

Единственное, что вам необходимо, это наличие winsock.dcu/winsock.pas, так как это не включается в поставку Delphi 1.; необходимый мне код я взял из tcpip component pack (просто вырезал его оттуда).

Дополнение от Eugene:

Данный пример не работает из-за того что не проинициализирована структура TWSAData. если немного подправить эту функцию, то получится примерно следующее:

function my_ip_address: longint;
const
  bufsize = 255;
  WSVer = $101;
var
  buf: pointer;
  RemoteHost: PHostEnt; // Не освобождайте это! 
  wsaData: TWSAData;
begin
if WSAStartup(WSVer, wsaData) <> 0 then
 begin
  my_ip_address := 0;
  exit;
  end;
  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;

Функция вернет ненулевое значение в случае успеха.
Тестировано под WinXP SP1, D6

Название: Определение своего IP адреса
Дата публикации: 2004-09-02 (3512 Прочтено)

 
 

 

Page generation 0.026 seconds