Я пытаюсь запустить приложение Pharo, которому требуются данные из IP-адреса главного компьютера, на котором оно запущено. В общем, мне нужно открыть код, чтобы установить его вручную в моем коде Pharo, а затем запустить приложение. Есть ли лучший программный способ получения IP-адреса и автоматического возврата этого адреса независимо от компьютера? Скажем, я развернул его на другом компьютере.
Не существует такого понятия, как «IP-адрес». Компьютеры могут иметь несколько сетевых подключений (Wi-Fi, проводные), каждое из которых имеет свой собственный адрес.
Думаю, вы ищете NetResolverName
.
Чтобы получить имя вашего компьютера:
NetNameResolver localHostName
Затем вы можете использовать его в качестве IP-адреса. Если вы выполняете в Workspace:
NetNameResolver addressForName: NetNameResolver localHostName
Вы получите адрес в локальной сети.
В моем случае: #[192 168 1 17]
Редактировать
Вы также можете напрямую запросить его через:
NetNameResolver localAddressString
Где получить только: '192 168 1 17'
Если вы получаете адрес localhost
=> 127.0.0.1
, у вас, вероятно, проблемы с сопоставлением хоста.
Вы можете проверить это с помощью ping "hostname"
, например. ping localhost.localdomain
на который вы получите ответы от 127.0.0.1
. Если у вас правильные настройки (хосты, DNS и т. д.), Вы должны получить ответ со своего IP-адреса.
Когда я поменял hostname
с localhost.localdomain
на smalltalk
, тогда ping smalltalk правильно отвечает с 192.168.10.30
. Тогда Pharo
выдаст правильный результат.
при этом я получаю адрес обратной связи 127.0.0.1. Вместо этого мне нужен частный IP, как в вашем случае.
@ludo что вам возвращает NetNameResolver localHostName
?
Он возвращает ByteString с именем компьютера.
@ludo не могли бы вы опубликовать настоящее имя?
Так называется компьютер: mylinux
@ludo, если вы делаете ping mylinux
, какой IP-адрес запрашивается? (Я предполагаю, что у вас нет правильного сопоставления имени с IP-адресом). Приведенный выше пример был запущен в Windows, он правильно возвращает IP при пинге. Когда я попробовал использовать свою Linux-виртуальную машину с ping localhost.localdomain
, я получил возврат 127.0.0.1
=> Pharo показал 127.0.0.1
. Когда я изменил имя sudo hostnamectl set-hostname smalltalk
(имя хоста smalltalk
сопоставлено с 192.168.10.30
), ping smalltalk
правильно возвращает 192.168.10.30
, как и Pharo.
вы действительно правы. ping вернет 127.0.0.1. Означает ли это, что мне нужно внести изменения в / etc / hosts? Я поменял имя, ни к чему не разрешается
@ludo, который зависит от настроек вашей сети. самый легкий, не всегда правильно, заключается в внесении изменений в ваш /etc/hosts
.
Он отлично работает с окнами. Я внесу некоторые изменения и дам вам знать. Спасибо.
@ludo, вы должны проголосовать за этот ответ (помимо отметки зеленой отметкой). Спасибо!
пожалуйста, не забудьте отметить свои вопросы отвеченными, когда вы будете довольны ответом! Подробнее см. stackoverflow.com/help/someone-answers