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

InetAddress.toString() возвращает косую черту

У меня есть переменная пакет типа DatagramPacket. В то время как packet.getAddress().toString() выводит строку, представляющую IP-адрес, у нее есть дополнительный /, добавленный к началу строки:

/127.0.0.1

Я могу легко удалить ведущий '/', но есть ли лучший способ просто получить строковое представление IP? Я беспокоюсь, потому что, если в других ситуациях больше '/'.

Спасибо!

4b9b3361

Ответ 1

Используйте следующее:

packet.getAddress().getHostAddress()

В документации :

Возвращает строку IP-адреса в текстовом представлении.

Сравните это с InetAddress.toString():

Преобразует этот IP-адрес в String. Возвращаемая строка имеет вид: hostname/literal IP-адрес. Если имя хоста не разрешено, поиск обратного имени не выполняется. Часть имени хоста будет представлена ​​пустой строкой.

Ответ 2

Если вам нужен IP-адрес, используйте адрес хоста:

String address = InetAddress.getByName("stackoverflow.com").getHostAddress();

Если вы просто хотите имя хоста, используйте

String hostname = InetAddress.getByName("stackoverflow.com").getHostName();

Слэш, который вы видите, вероятно, когда вы используете неявный toString() в возвращаемом InetAddress при попытке распечатать его, который печатает имя и адрес хоста, разделенные косой чертой (например, stackoverflow.com/64.34. 119,12). Вы можете использовать

String address = InetAddress.getByName("stackoverflow.com").toString().split("/")[1];
String hostname = InetAddress.getByName("stackoverflow.com").toString().split("/")[0];

Но нет никакой причины, чтобы обратиться к String-посреднику. InetAddress сохраняет оба поля отдельно.