Подтвердить что ты не робот

Каков правильный способ построения InetSocketAddress с любым хостом IP-адреса?

Я хочу создать InetSocketAddress, но я хочу сделать это правильно, независимо от того, получаю ли я порт хоста: порт или ip: порт. Я вижу, что у него есть два конструктора: один для хоста (String) и другой для IP (InetAddress). Должен ли я определять себя, если у меня есть IP или HOST, чтобы выбрать между этими двумя конструкторами? Я что-то пропустил?

4b9b3361

Ответ 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, поэтому вы будете использовать только один конструктор.