Я хочу создать InetSocketAddress, но я хочу сделать это правильно, независимо от того, получаю ли я порт хоста: порт или ip: порт. Я вижу, что у него есть два конструктора: один для хоста (String) и другой для IP (InetAddress). Должен ли я определять себя, если у меня есть IP или HOST, чтобы выбрать между этими двумя конструкторами? Я что-то пропустил?
Каков правильный способ построения InetSocketAddress с любым хостом IP-адреса?
Ответ 1
Вы можете сделать вывод из Javadoc и увидеть в исходном коде, что new InetSocketAddress(String hostname, int port)
вызывает InetAddress.getByName(hostname)
, который сортирует все, что вы для вас, как задокументировано.
Итак, проблема, которую вы публикуете, на самом деле не существует. Просто передайте любую строку, которую вы получите, имя хоста или IP-адрес.
Ответ 2
Я не совсем уверен, что вы спрашиваете, но я сделал этот быстрый тест на своем ПК без каких-либо проблем.
try {
String ipAddress = ""; // Add your own
String hostName = ""; // Add your own
int port = ...; // You'll need some sort of service to connect to
InetSocketAddress byAddress1 = new InetSocketAddress(ipAddress, port);
InetSocketAddress byAddress2 = new InetSocketAddress(InetAddress.getByName(ipAddress), port);
InetSocketAddress byName1 = new InetSocketAddress(hostName, port);
InetSocketAddress byName2 = new InetSocketAddress(InetAddress.getByName(hostName), port);
} catch (UnknownHostException unknownHostException) {
unknownHostException.printStackTrace();
}
Чем больше вопрос, тем больше ожидается, что он будет введен в качестве входных данных? IP-адрес, имя хоста или какую-либо другую форму
Ответ 3
Вам нужно будет определить, передается ли String конструктору IP или имя хоста. Я бы сделал это с Regex для IP-адреса. Если это не удается, возможно, это имя хоста.
Оба IP-адреса и имена хостов являются String, поэтому вы будете использовать только один конструктор.