Сетевые средства Java

         

Работа по протоколу UDP


Работа по протоколу UDP

Для посылки дейтаграмм отправитель и получатель создают сокеты дейта-граммного типа. В Java их представляет класс DatagramSocket. В классе три конструктора:

  • DatagramSocket ()

    — создаваемый сокет присоединяется к любому свободному порту на локальной машине;

  • DatagramSocket (int port)

    — создаваемый сокет присоединяется к порту port на локальной машине;

  • DatagramSocket(int port, InetAddress addr) — создаваемый СОКСТ при

    соединяется к порту port; аргумент addr — один из адресов локальной машины.

    Класс содержит массу методов доступа к параметрам сокета и, кроме того, методы отправки и приема дейтаграмм:

    • send(DatagramPacket pack)

      — отправляет дейтаграмму, упакованную в пакет pack;

    • receive (DatagramPacket pack)

      — дожидается получения дейтаграммы и заносит ее в пакет pack.

      При обмене дейтаграммами соединение обычно не устанавливается, дейтаграммы посылаются наудачу, в расчете на то, что получатель ожидает их. Но можно установить соединение методом

      connect(InetAddress addr, int port)

      При этом устанавливается только одностороннее соединение с хостом по адресу addr и номером порта port — или на отправку или на прием дейтаграмм. Потом соединение можно разорвать методом

      disconnect()

      При посылке дейтаграммы по протоколу JJDP сначала создается сообщение в виде массива байтов, например,

      String mes = "This is the sending message.";

      byte[] data = mes.getBytes();

      Потом записывается адрес — объект класса inetAddress, например: 

      InetAddress addr = InetAddress.getByName (host);

      Затем сообщение упаковывается в пакет — объект класса DatagramPacket. При этом указывается массив данных, его длина, адрес и номер порта:

      DatagramPacket pack = new DatagramPacket(data, data.length, addr, port)

      Далее создается дейтаграммный сокет

      DatagramSocket ds = new DatagramSocket()

      и дейтаграмма отправляется

      ds.send(pack)

      После посылки всех дейтаграмм сокет закрывается, не дожидаясь какой-либо реакции со стороны получателя:

      ds.close ()

      Прием и распаковка дейтаграмм производится в обратном порядке, вместо метода send () применяется метод receive (DatagramPacket pack).

      В листинге 19.5 показан пример класса Sender, посылающего сообщения, набираемые в командной строке, на localhost, порт номер 1050. Класс Recipient, описанный в листинге 19.6, принимает эти сообщения и выводит их в свой стандартный вывод.



      Содержание раздела