В классе InetAddress есть метод getByAddress,который принимает на вход массив байтов, содержащий IPv4 или IPv6. Но в Java максимально значение byte - 128, то есть некоторые адреса передать не удастся, например на
InetAddress host = InetAddress.getByAddress(new byte[]{192, 168, 0, 1});
будет ругаться, так как 192 и 168 не входят в диапазон значений byte.
То есть получается, что можно передать далеко не все адреса? Или я что-то не так понимаю?
Классы для работы с IP воспринимают переданные байты как набор битов, а не как знаковые значения типа byte. Поэтому чтобы передать значения выходящие за пределы диапазона достаточно привести их к byte:
InetAddress host = InetAddress.getByAddress(new byte[]{(byte) 192, (byte) 168, (byte) 0, (byte) 1});
Значения от 128 до 255 будут приведены к отрицательным значениям от -1 до -128.
В качестве альтернативы можно использовать метод, принимающий строку:
InetAddress host = InetAddress.getByName("192.168.0.1");
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости