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