uses
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 thenbeginif GetHostName(@Buf, 128) = 0 thenbegin
P := GetHostByName(@Buf);
if P <> nilthen Result := iNet_ntoa(PInAddr(p^.h_addr_list^)^);
end;
WSACleanup;
end;
end;
Here is the translation of the text into Russian:
Программа на языке Delphi для определения локального IP-адреса!
Код использует Windows Sockets (WinSock) API и функцию WSAStartup для инициализации библиотеки WinSock. Затем он использует GetHostName для получения имени хоста локальной машины, которое хранится в буфере. Функция GetHostByName используется для разрешения имени хоста на IP-адрес. Наконец, функция Inet_ntoa используется для конвертации IP-адреса из двоичной формы в строку.
Вот разбивка кода:
WSVer := $101; - Устанавливает номер версии для инициализации WinSock.
var wsaData: TWSAData; - Объявляет переменную для хранения данных инициализации WinSock.
P: PHostEnt; - Объявляет указатель на структуру HOSTENT, которая будет содержать информацию о разрешенном имени хоста и IP-адресе.
Buf: array [0..127] of Char; - Объявляет буфер для хранения имени хоста.
Result := ''; - Инициализирует пустую строку для хранения результата IP-адреса.
if WSAStartup(WSVer, wsaData) = 0 then begin - Инициализирует WinSock с помощью предоставленного номера версии и хранит результат в wsaData.
if GetHostName(@Buf, 128) = 0 then begin - Разрешает имя хоста на строку и хранит ее в буфере.
P := GetHostByName(@Buf); - Конвертирует строку имени хоста в IP-адрес с помощью разрешения DNS.
if P <> nil then Result := iNet_ntoa(PInAddr(P^.h_addr_list^)^); - Конвертирует двоичный IP-адрес в строку с помощью Inet_ntoa и присваивает ее переменной Result.
WSACleanup; - Очищает ресурсы WinSock.
Функция возвращает пустую строку, если любая из шагов инициализации или разрешения fails, иначе она возвращает локальный IP-адрес в виде строки.
Обратите внимание, что этот код использует встроенную поддержку WinSock Delphi и не требует дополнительных библиотек.
В статье рассматривается способ определения собственного IP-адреса на компьютере с помощью функции GetLocalIP, написанной на языке Delphi.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS