Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых

Microsoft Visual J++. Создание приложений и аплетов на языке Java. Часть 2

© Александр Фролов, Григорий Фролов
Том 32, М.: Диалог-МИФИ, 1997, 288 стр.

[Назад] [Содеожание] [Дальше]

Приложение InetAddressDemo

Приложение InetAddressDemo отображает имя и адрес IP локального узла, а затем запрашивает имя удаленного узла. Еси такой узел существует, для него определяется и отображается на консоли список адресов IP (рис. 3.1).

Рис. 3.1. Работа приложения InetAddressDemo

Если же указано имя несуществующего узла, возникает исключение UnknownHostException, о чем на консоль выводится сообщение.

Исходные тексты приложения InetAddressDemo

Исходные тексты приложения InetAddressDemo приведены в листинге 3.1.

Листинг 3.1. Файл InetAddressDemo\InetAddressDemo.java


// =========================================================
// Работа с адресами IP с помощью класса InetAddress
//
// (C) Фролов А.В, 1997
//
// E-mail: frolov@glas.apc.org
// WWW:    http://www.glasnet.ru/~frolov
//            или
//         http://www.dials.ccas.ru/frolov
// =========================================================
import java.net.*;
import java.io.*;
import java.util.*;

// =========================================================
// Класс InetAddressDemo
// Главный класс приложения
// =========================================================
public class InetAddressDemo
{
  // -------------------------------------------------------
  // main
  // Метод, получающий управление при запуске приложения
  // -------------------------------------------------------
  public static void main(String args[])
  {
    // Массив для ввода строки с клавиатуры
    byte bKbdInput[] = new byte[256];

    // Введенная строка
    String sIn;

    // Рабочая строка
    String str;

    // Адрес локального узла
    InetAddress iaLocal;

    // Массив байт адреса локального узла
    byte[] iaLocalIP;

    // Массив всех адресов удаленного узла
    InetAddress[] iaRemoteAll;

    try
    {
      // Получаем адрес локального узла
      iaLocal = InetAddress.getLocalHost();

      // Отображаем имя локального узла на консоли
      System.out.println("Local host name: " +
        iaLocal.getHostName());

      // Определяем адрес IP локального узла
      iaLocalIP = iaLocal.getAddress();

      // Отображаем отдельные байты адреса IP 
      // локального узла
      System.out.println("Local host IP address: " +
        (0xff & (int)iaLocalIP[0]) + "." + 
        (0xff & (int)iaLocalIP[1]) + "." + 
        (0xff & (int)iaLocalIP[2]) + "." + 
        (0xff & (int)iaLocalIP[3]));

      // Отображаем адрес IP локального узла, полученный
      // в виде текстовой строки
      System.out.println("Local host IP address: " + 
        iaLocal.toString());

      // Вводим имя удаленного узла, адрес которого
      // мы будет определять
      System.out.println("Enter remote host name...");
      System.in.read(bKbdInput);
      sIn = new String(bKbdInput, 0);

      // Обрезаем строку, удаляя символ конца строки
      StringTokenizer st;
      st  = new StringTokenizer(sIn, "\r\n");
      str = new String((String)st.nextElement());

      // Получаем все адреса IP, свяжанные с удаленным
      // узлом, имя которого мы только что ввели
      iaRemoteAll = InetAddress.getAllByName(str);

      // Отображаем эти адреса на консоли
      for(int i = 0; i < iaRemoteAll.length; i++)
      {
        System.out.println("Remote host IP address: " + 
          iaRemoteAll[i].toString());
      }

      System.out.println("Press <Enter> to terminate...");
      System.in.read(bKbdInput);
    }
    catch(Exception ioe)
    {
      System.out.println(ioe.toString());
    }
  }
}

Описание исходных текстов

Сразу после запуска приложение создает кобъект класса InetAddress для локального узла, вызывая для этого статический метод getLocalHost:


iaLocal = InetAddress.getLocalHost();

Далее для созданного объекта вызывается метод getHostName, возвращающий строку имени локального узла:


System.out.println("Local host name: " +
  iaLocal.getHostName());

Это имя отображается на консоли приложения.

Затем приложение определяет адрес IP локального узла, вызывая метод getAddress:


iaLocalIP = iaLocal.getAddress();

Напомним, что этот метод возвращает массив четырех байт адреса IP.

Адрес IP мы отображаем на консоли с помощью метода println:


System.out.println("Local host IP address: " +
  (0xff & (int)iaLocalIP[0]) + "." + 
  (0xff & (int)iaLocalIP[1]) + "." + 
  (0xff & (int)iaLocalIP[2]) + "." + 
  (0xff & (int)iaLocalIP[3]));

Заметьте, что байты адреса записваются в массив типа byte как знаковые величины. Для того чтобы отображить их на консоли в виде положительных чисел, мы вначале выполняем явное преобразование к типу int, а затем обнуляем старший байт (так как такое преобразование выполняется с сохранением знака).

Наше приложение демонстрирует также другой способ получения адреса IP для объекта класса InetAddress, который заключается в вызове метода toString:


System.out.println("Local host IP address: " + 
  iaLocal.toString());

На втором этапе приложение InetAddressDemo вводит строку имени удаленного узла и, после удаления символа перехода на новую строку, пытается создать для введенного имени массив объектов класса InetAddress. Для этого приложение вызывает метод getAllByName:


iaRemoteAll = InetAddress.getAllByName(str);

Содержимое созданного массива отображается в цикле, причем адрес IP извлекается из объектов класса InetAddress методом toString:


for(int i = 0; i < iaRemoteAll.length; i++)
{
  System.out.println("Remote host IP address: " + 
    iaRemoteAll[i].toString());
}
[Назад] [Содеожание] [Дальше]