Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Преобразуем доменное имя в IP-адрес

Delphi , Интернет и Сети , TCP/IP

Преобразуем доменное имя в IP-адрес

Развод по-инетовски: В игнор и девичий IP.

Описывается функция, которая показывает, как вычислить IP адрес компьютера в интернете по его доменному имени.

Объявляем Winsock, для использования в функции:


function HostToIP(name: string; var Ip: string): Boolean;
var
  wsdata : TWSAData;
  hostName : array [0..255] of char;
  hostEnt : PHostEnt;
  addr : PChar;
begin
  WSAStartup ($0101, wsdata);
  try
    gethostname (hostName, sizeof (hostName));
    StrPCopy(hostName, name);
    hostEnt := gethostbyname (hostName);
    if Assigned (hostEnt) then
      if Assigned (hostEnt^.h_addr_list) then begin
        addr := hostEnt^.h_addr_list^;
        if Assigned (addr) then begin
          IP := Format ('%d.%d.%d.%d', [byte (addr [0]),
          byte (addr [1]), byte (addr [2]), byte (addr [3])]);
          Result := True;
        end
        else
          Result := False;
      end
      else
        Result := False
    else begin
      Result := False;
    end;
  finally
    WSACleanup;
  end
end;

Вы можете разместить на форме Edit, Кнопку и Label и добавить к кнопке следующий обработчик события OnClick:


procedure TForm1.Button1Click(Sender: TObject);
var
  IP: string;
begin
  if HostToIp(Edit1.Text, IP) then
    Label1.Caption := IP;
end;

Перевод контента на русский язык:

Программа Delphi, функция HostToIP, конвертирует доменное имя в IP-адрес с помощью Windows Sockets API (Winsock). Функция принимает два параметра: name - доменное имя, и Ip - переменная для хранения результата.

Разбор работы кода:

  1. Сначала инициализируется Winsock с помощью функции WSAStartup.
  2. Затем получается hostname локального компьютера с помощью функции gethostname и копируется в массив hostName.
  3. Функция StrPCopy используется для копирования доменного имени из контрола Edit1 (предполагается, что это текстовый редактор на форме) в массив hostName.
  4. Затем функция gethostbyname используется для разрешения hostname в IP-адрес. Она возвращает указатель на PHostEnt, который проверяется на присваивание с помощью функции Assigned.
  5. Если разрешение успешно, то получается первый IP-адрес из списка адресов, возвращенных gethostbyname, и копируется в массив addr.
  6. Функция Format используется для конвертации IP-адреса из бинарного представления (четыре байта) в строку в формате, понятном человеку (например, "192.168.1.1").
  7. Наконец, результат хранится в переменной IP и присваивается caption контрола Label1.

Событийный обработчик Button1Click используется для вызова функции HostToIp с доменным именем из контрола Edit1 как аргументом. Если разрешение успешно, то обновляется caption контрола Label1 с результатом IP-адреса.

Сuggestions for improvement:

  • Обработка ошибок: код не обрабатывает ошибки хорошо. Например, если функция gethostbyname не может разрешить hostname, код просто возвращает False. Лучше было бы поймать конкретные условия ошибок и предоставить более информативные сообщения ошибках.
  • Организация кода: код очень плотный и мог бы быть разбит на меньшие функции или процедуры с ясными именами. Это было бы проще для чтения и обслуживания.
  • Безопасность типов: некоторые конверсии типов (например, PChar в string) не являются явно типизированными, что может привести к ошибкам на этапе выполнения. Лучше было бы использовать явные типизации конверсий типов, когда это возможно.

Вот альтернативное решение с использованием библиотеки Indy, которая предоставляет более современный и надежный способ работы с сокетами:

program HostToIp;
uses
  Indianapolis,
  WinSock;

function HostToIP(const AHost: string; out AIp: string): Boolean;
var
  H: THost;
begin
  H := THost.Create();
  try
    Result := H.HostToAddress(AHost, AIp);
  finally
    H.Free();
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  IP: string;
begin
  if HostToIP(Edit1.Text, IP) then
    Label1.Caption := IP;
end;

Код использует класс THost из библиотеки Indy для разрешения hostname в IP-адрес. Метод HostToAddress принимает hostname и строковый параметр output для результата IP-адреса. Если разрешение успешно, то возвращает True, иначе возвращает False.

Данная статья описывает функцию на языке Delphi, которая преобразует доменное имя в IP-адрес компьютера в интернете.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: TCP/IP ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-28 05:59:56/0.0036318302154541/0