|
||||||
Программирование мобильных телефонов
Программирование на Java
|
Работа по протоколу UDP Для посылки дейтаграмм отправитель и получатель создают сокеты дейта-граммного типа. В Java их представляет класс DatagramSocket. В классе три конструктора:
Класс содержит массу методов доступа к параметрам сокета и, кроме того, методы отправки и приема дейтаграмм:
При обмене дейтаграммами соединение обычно не устанавливается, дейтаграммы посылаются наудачу, в расчете на то, что получатель ожидает их. Но можно установить соединение методом 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, принимает эти сообщения и выводит их в свой стандартный вывод. Листинг 19.5. Посылка дейтаграмм по протоколу UDP import java.net.*; import java.io.*; class Sender{ private String host; private int port; Sender(String host, int port){ this.host = host; this.port = port; } private void sendMessage(String mes){ try{ byte[] data = mes.getBytes(); InetAddress addr = InetAddress.getByName(host); DatagramPacket pack = new DatagramPacket(data, data.length, addr, port); DatagramSocket ds = new DatagramSocket(); ds.send(pack); ds.close(); }catch(IOException e){ System.err.println(e); } } public static void main(String[] args){ Sender sndr = new Sender("localhost", 1050); for (int k = 0; k < args.length; k++) sndr.sendMessage(args[k]); } } Листинг 19.6. Прием дейтаграмм по протоколу UDP import j ava.net.*; import java.io.*; class Recipient{ public static void main(String[] args)( try{ DatagramSocket ds = new DatagramSocket(1050); while (true){ DatagramPacket pack = new DatagramPacket(new byte[1024], 1024); ds.receive(pack); System.out.println(new String(pack.getData())); } )catch(Exception e){ System.out.println(e); } } }
|
|
||||
Copyright © vzlom-1.ru 2020-2023
|