Druzya.org
Возьмемся за руки, Друзья...
 
 
Наши Друзья

Александр Градский
Мемориальный сайт Дольфи. 
				  Светлой памяти детей,
				  погибших  1 июня 2001 года, 
				  а также всем жертвам теракта возле 
				 Тель-Авивского Дельфинариума посвящается...

Библиотека :: Компьютеры и Программирование :: А.В. Фролов, Г.В. Фролов - Microsoft Visual J++
<<-[Весь Текст]
Страница: из 275
 <<-
 
(9998);

      // Создаем пакет для приема команд
      pinp = new DatagramPacket(buf, 512);

      // Цикл обработки команд, полученных от клиента
      while(true)
      {
        // Принимаем пакет от клиента
        s.receive(pinp);

        // Получаем адрес узла, приславшего пакет
        SrcAddress = pinp.getAddress();

        // Получаем порт, на котором был передан пакет
        SrcPort    = pinp.getPort();

        // Отображаем принятую команду на консоли сервера

        // Формируем строку из принятого блока
        String str = new String(buf, 0);

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

        // Выводим строку команды на консоль
        System.out.println(">  " + str + " < " +
          "port: " + SrcPort);

        // Если пришла команда 'quit', прерываем цикл
        if(str.equals("quit"))
          break;
      }

      // Закрываем сокет сервера
      s.close();

    }
    catch(Exception ioe)
    {
      System.out.println(ioe.toString());
    }
    
    try
    {
      System.out.println(
        "Press  to terminate application...");

      System.in.read(bKbdInput);
    }
    catch(Exception ioe)
    {
      System.out.println(ioe.toString());
    }
  }
}
   Описание исходного текста приложения DatagramServer
   Внутри функции main мы определили несколько переменных.
   Массив bKbdInput хранит строку, введенную с клавиатуры.
   Массив buf используется для хранения строк (команд), которые сервер получает 
от клиентских приложений.
   В переменной s класса DatagramSocket хранится ссылка на датаграмный сокет, 
который будет использован для приема команд от клиентских приложений.
   Переменная pinp класса DatagramPacket хранит пакеты, полученные сервером из 
сети.
   Переменные SrcAddress (класса InetAddress) и SrcPort типа int хранят, 
соответственно, адрес и порт узла, отправившего пакет.
   Первое, что делает сервер - это создание датаграммного сокета:
s = new DatagramSocket(9998);
   Конструктору передается номер порта 9998, на котором сервер будет принимать 
пакеты данных от клиентских приложений.
   После создания сокета сервер создает объекта класса DatagramPacket, в 
который будут записываться приходящие от клиентов пакеты:
pinp = new DatagramPacket(buf, 512);
   Конструктор пакета получает ссылку на массив buf, в который нужно будет 
записывать приходящие по сети данные, и размер этого массива, равный 512 байт.
   Далее сервер запускает цикл приема пакетов и отображения их содержимого.
   Пакет принимается простым вызовом метода receive из класса DatagramSocket:
s.receive(pinp);
   Этот метод блокирует работу вызвавшей его задачи до тех пор, пока по данному 
сокету не будет получен пакет данных.
   Когда пакет будет получен, наше приложение определяет адрес и порт 
отправителя:
SrcAddress = pinp.getAddress();
SrcPort    = pinp.getPort();
   Эта информация может пригодиться, если вы будете посылать отправителю 
ответный пакет. 
   Наше приложение ответные пакеты не посылает. Оно преобразует принятые данные 
в текстовую староку класса String, добавляет к этой строке номер порта 
отправителя и отображает эту информацию на консоли:
System.out.println(">  " + str + " < " + "port: " + 
  SrcPort);
   Цикл приема команд завершается, если от клиента пришла строка “quit”:
if(str.equals("quit"))
  break;
   Перед тем как завершить свою работу, наше приложение закрывает датаграммный 
сокет, вызывая для этого метод close:
s.close();
   Исходный текст приложения DatagramClient
   В листинге 3.8 приведен исходный текст приложения DatagramClient.
Листинг 3.8. Файл Dat
 
<<-[Весь Текст]
Страница: из 275
 <<-