Иллюстрированный самоучитель по 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()

При посылке дейтаграммы по протоколу 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)

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




Содержание  Назад  Вперед