Иллюстрированный самоучитель по Java

Работа по протоколу 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()

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

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 ()
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.