Главная > Программирование > Программирования сетевых взаимодействий в Java
<< Предыдущий параграф
Следующий параграф >>
<< Предыдущий параграф Следующий параграф >>
Макеты страниц

1.2. Класс InetAddress

Класс InetAddress используется для инкапсуляции как числового IP-адреса, так и доменного имени для этого адреса. Взаимодействие осуществляется с классом, используя имя IP-хоста. Класс InetAddress может работать как с адресами IPv4, так и с IPv6.

Класс InetAddress не имеет конструкторов. Чтобы создать объект InetAddress, вы должны использовать один из доступных методов-фабрик. Методы-фабрики (factory method) - это просто соглашение, в соответствии с которым статические методы класса возвращают экземпляр этого класса. Это делается вместо перегрузки конструктора с различными списками параметров, когда наличие уникальных имен методов делает результат более ясным. Ниже приведены три часто используемых метода-фабрики InetAddress.

static InetAddress getLocalHost()

static InetAddress getByName(String hostName)

static InetAddress[] getAllByName(String hostName)

Метод getLocalHost() просто возвращает объект InetAddress, представляющий локальный хост. Метод getByName() возвращает InetAddress хоста, чье имя ему передано. Если эти методы оказываются не в состоянии получить имя хоста, они возбуждают исключение UnknownHostException.

Метод-фабрика getAllByName() возвращает массив InetAddress, представляющий все адреса, в которые преобразуется конкретное имя. Он также возбуждает исключение UnknownHostException в случае, если не может преобразовать имя в хотя бы один адрес.

InetAddress также включает фабричный метод getByAddress(), который принимает IP-адрес и возвращает объект InetAddress. Причем могут использоваться как адреса IPv4, так и IPv6.

В следующем примере распечатываются адреса и имена локальной машины, а также двух широко известных Internet-сайтов.

// Демонстрация применения InetAddress.

package iad; import java.net.*;

class iad {

    public static void main(String args[]) throws UnknownHostException {

        InetAddress Address = InetAddress.getLocalHost();

        System.out.println(Address);

        Address = InetAddress.getByName("ulstu.ru");

        System.out.println(Address);

        InetAddress SW[] = InetAddress.getAllByName("www.microsoft.com");

        for (int i=0; i<SW.length; i++)

            System.out.println(SW[i]);

    }

}

Ниже показан вывод, сгенерированный этой программой (вывод, который вы увидите на своем компьютере, может несколько отличаться).

home/10.250.0.172

ulstu.ru/62.76.34.54

www.microsoft.com/65.55.21.250

Поиск Интернет-адресов осуществляется в серии иерархических каптированных служб. Это значит, что ваш локальный компьютер может получить определенное отображение имени на IP-адрес автоматически как для себя, так и для ближайших серверов. Для всех прочих имен он может обращаться к DNS-серверам, откуда получит информацию об IP-адресах. Если такой сервер не имеет информации об определенном адресе, он может обратиться к следующему удаленному сайту и запросить эту информацию у него. Это может продолжаться вплоть до корневого сервера, и упомянутый процесс может потребовать длительного времени, так что разумно построить структуру вашего кода таким образом, чтобы информация об IP-адресах локально кэшировалась, и ее не приходилось искать каждый раз заново.

Основные методы класса InetAddress

boolean equals(Object other). Возвращает true, если объект имеет тот же адрес Интернет, что и other.

byte[] getAddress(). Возвращает байтовый массив, представляющий IP-адрес в порядке байт сети.

String getHostAddress(). Возвращает строку, представляющую адрес хоста, ассоциированного с объектом InetAddress.

String getHostName(). Возвращает строку, представляющую имя хоста, ассоциированного с объектом InetAddress.

boolean isMulticastAddress(). Возвращает true, если адрес является групповым, в противном случае возвращает false.

String toString(). Возвращает строку, включающую имя хоста и IP-адрес для удобства.

<< Предыдущий параграф Следующий параграф >>