Перейти к содержанию
Fire Monkey от А до Я
  • 0

Как разрешить имя хоста в ip адрес на Андроиде?


AnnihilatoR AnnihilatoR

Вопрос

Как разрешить имя хоста в ip адрес на Андроиде? Вопрос касается именно локальной сети. Итернет адреса, например, «ya.ru» можно разрешить с помощью TIdStack ResolveHost(). Для локальной сети это не работает.

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

В контексте Delphi, вы можете использовать Indy компоненты для этого. TIdStack имеет метод ResolveHost() который может быть использован для разрешения имени хоста.
 

var
  GStack: TIdStack;
begin
  GStack := TIdStack.Create;
  try
    ShowMessage(GStack.ResolveHost('localhost', Id_IPv4).ToString);
  finally
    GStack.Free;
  end;
end;

Учтите, что разрешение имени хоста в IP-адрес не гарантирует, что хост будет доступен для подключения. Если имя хоста не может быть разрешено, будет вызвано исключение UnknownHostException.

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

По поводу вашей проблемы с локальной сетью - возможно, имя хоста, которое вы пытаетесь разрешить, не зарегистрировано в локальном DNS. В этом случае, вы можете попробовать использовать полное доменное имя (FQDN) хоста, или использовать прямой IP-адрес, если он известен.

Если метод разрешения имен не работает для локальной сети, вероятно, проблема связана с настройками DNS в вашей локальной сети. Имена хостов в локальной сети обычно разрешаются с помощью механизма DNS, поэтому если ваш DNS сервер или файлы hosts не содержат соответствующих записей для имени хоста, который вы пытаетесь разрешить, то метод разрешения имен вернет ошибку.

Если вы контролируете настройки DNS в вашей локальной сети, вы можете добавить соответствующие записи для всех хостов, которые вы хотите разрешать.

Кроме того, некоторые системы поддерживают механизмы обнаружения служб на локальной сети, такие как mDNS (Multicast DNS), который используется в протоколе Zeroconf/Bonjour. Если ваши устройства и приложения поддерживают mDNS, вы можете использовать имена хостов с суффиксом .local для разрешения имён в локальной сети.

Пожалуйста, учтите, что разрешение имён хостов в IP-адреса - это сложная область, которая зависит от многих факторов, включая конфигурацию вашей сети, настройки DNS, поддержку протоколов обнаружения служб и т.д. Если вы столкнулись с проблемами, вам может потребоваться обратиться к системному администратору или к специалисту по сетям для получения помощи.

Изменено пользователем Martifan
Ссылка на комментарий
  • 0

Дело в том, что приложение собранное под Windows  с задачей справляется, например, имя хоста "Comp0" разрешается в 192.168.0.10.
Однако тоже самое приложение собранное под Android вызывает исключение UnknownHostException.
При этом интернет адреса и в том и в другом случае разрешаются удачно.

Ссылка на комментарий
  • 0
В 20.06.2023 в 13:26, AnnihilatoR A сказал:

Дело в том, что приложение собранное под Windows  с задачей справляется, например, имя хоста "Comp0" разрешается в 192.168.0.10.
Однако тоже самое приложение собранное под Android вызывает исключение UnknownHostException.
При этом интернет адреса и в том и в другом случае разрешаются удачно.

Есть несколько возможных причин для вашей проблемы. Самая вероятная причина - это различие в том, как системы Android и Windows обрабатывают локальные имена хостов.

1. DNS и DHCP: Имена хостов, которые работают в вашей локальной сети, обычно разрешаются через DHCP и DNS, работающие на вашем маршрутизаторе или другом устройстве сети. Android может не иметь доступа к этой информации или может обрабатывать её по-другому.

2. Сетевая изоляция: Android может изолировать приложения от локальной сети для улучшения безопасности. Это может препятствовать разрешению локальных имен хостов.

3. Конфигурация приложения: Ваше приложение может требовать определенных разрешений для доступа к сети, которые должны быть указаны в файле манифеста приложения Android.

4. Сервисы Android: В зависимости от версии Android и/или конфигурации устройства, некоторые службы, такие как mDNS, могут быть отключены или недоступны.

Ваша задача может включать в себя решение этих проблем или поиск альтернативного решения, которое работает как на Android, так и на Windows.

Например, вместо использования имени хоста "Comp0" вы могли бы использовать IP-адрес напрямую (если он статический), или вы могли бы реализовать некоторую форму обнаружения служб в вашем приложении, чтобы найти нужный хост в вашей сети.

Ссылка на комментарий
  • 0
В 20.06.2023 в 21:41, Slym сказал:

Name Query NB

Name Query NB (NetBIOS) - это протокол, используемый в сетях Windows для разрешения имен сетевых узлов.

NetBIOS (Network Basic Input/Output System) представляет собой программный интерфейс, который позволяет компьютерам в локальной сети общаться друг с другом. Он был создан в 1980-х годах и до сих пор используется в некоторых сетях Windows.

Если ваше приложение, работающее под управлением Android, вызывает исключение UnknownHostException, это может быть связано с тем, что Android, как правило, не поддерживает протокол NetBIOS из коробки.

В то время как в Windows эта функция встроена, в системе Android для ее работы может потребоваться дополнительная библиотека или служба.

Если вы должны использовать NetBIOS в своем приложении Android, вам придется найти способ включить эту поддержку, что может включать в себя использование сторонней библиотеки, которая поддерживает протокол NetBIOS, или применение специфической для Android реализации сетевого взаимодействия.

Однако важно помнить, что использование протокола NetBIOS может вызывать проблемы с безопасностью и совместимостью, поскольку он устарел и больше не рекомендуется для использования в современных сетевых средах.

Ссылка на комментарий
  • 0
В 21.06.2023 в 21:49, Martifan сказал:

Например, вместо использования имени хоста "Comp0" вы могли бы использовать IP-адрес напрямую (если он статический), или вы могли бы реализовать некоторую форму обнаружения служб в вашем приложении, чтобы найти нужный хост в вашей сети.

Да, вы правы, в моем случае так и получилось. Реализовал свою схему обнаружения в хоста в сети, черед широковещательно сообщение, на которое отзывается хост своим именем.

Всем спасибо за участие в обсуждении и поиске решения.

Ссылка на комментарий
  • 0
8 часов назад, Slym сказал:

На форумах принято делиться решениями...

Простите, собственно я раскрыл суть решения. Код не выкладываю, так как его достаточно много. Проблема ясна, решение найдено.

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...