Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

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




 

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

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

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

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

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

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

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

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

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

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

В примере 7.2 представлен класс, посылающий сообщения на localhost, порт номер 3333. Класс, описанный в примере 4, принимает эти сообщения и выводит их в свой стандартный вывод.

 

Пример 7. 2. Посылка дейтаграмм по протоколу UDP

public class Main {

private String host;

private int port;

public Main(String host, int port) {

this.host = host;

this.port = port;

}

public 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(Exception e) { System.err.println(e); }

}

public static void main(String[] args) {

System.out.println("Sender is running");

Main sndr = new Main("localhost", 3333);

for (int i = 0; i < 10; i++)

sndr.sendMessage("test message " + i);

}

}

 

Прием дейтаграмм по протоколу UDP

public class Main {

public static void main(String[] args) {

System.out.println("Receiver is running");

try {

DatagramSocket ds = new DatagramSocket(3333);

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); }

}

}

Практические задания

 

1. Изучить особенности реализации сетевых приложений в Java.

2. Доработать программу, созданную в лабораторных работах № 2-6:

1) создать отдельное консольное приложение, которое будет играть роль TCP-сервера. Клиентом будет приложение, которое было создано в предыдущих работах;

2) TCP-сервер должен ожидать подключения клиентов и выдавать вновь подключенному клиенту список уже подключенных. Необходимо также внести изменения в интерфейс клиента, так чтобы в панели управления отображался список всех подключенных к серверу клиентов. При отсоединении клиентов или при подключении новых список должен обновляться;

3) запрограммировать специальное взаимодействие по TCP с другими клиентами через сервер по варианту;

4) добавить возможность серверу управлять клиентами по протоколу UDP. Пользователь вводит команду в консольное окно сервера, и сервер отправляет команду тому или иному клиенту. Команда задается вариантом. Адреса клиентов можно получить из установленных TCP-соединений, порт UDP не должен совпадать с портом TCP;

5) связь между клиентами осуществляется через сервер. Для действия необходимо предусмотреть элементы управления в интерфейсе или команду в консоле.

 

Вариант 1

TCP: Реализовать выбор из одного подключенного клиента N случайных объектов и поместить в текущую симуляцию.

UDP: Команда отключения клиента.

Вариант 2

TCP: Реализовать возможность отправить N случайных объектов из текущей симуляции другому подключенному клиенту.

UDP: Команда перезагрузки (отключения, а затем повтороного подключения) клиента.

Вариант 3

TCP: Реализовать возможность получения и установки настроек симуляции таких же как у одного из подключенных клиентов.

UDP: Команда отключения клиента.

Вариант 4

TCP: Реализовать возможность передачи своих настроек симуляции одному из подключенных клиентов.

UDP: Команда перезагрузки (отключения, а затем повтороного подключения) клиента.

Вариант 5

TCP: Реализовать возможность обмена всех объектов одного вида на объекты такого же вида из другого подключенного клиента (например, все легковые машины из одной симуляции переходят в другую, а все легковые машины, что были в той другой симуляции, переходят в первую).

UDP: Команда отключения клиента.

Вариант 6

TCP: Реализовать возможность обмена всех объектов одного вида на объекты другого вида из другого подключенного клиента (например, все менеджеры из одной симуляции переходят в другую, а все разработчики, что были в той другой симуляции, переходят в первую).

UDP: Команда перезагрузки (отключения, а затем повтороного подключения) клиента.

Вариант 7

TCP: Реализовать возможность скопировать и добавить в симуляцию все объекты одного из подключенных клиентов.

UDP: Команда отключения клиента.

Вариант 8

TCP: Реализовать возможность обменяться всеми объектами с одним из подключенных клиентов.

UDP: Команда перезагрузки (отключения, а затем повтороного подключения) клиента.

Вариант 9

TCP: Реализовать возможность синхронной остановки и запуска симуляции на текущем и одном из подключенных клиентов, т.е. при остановке или запуске симуляции выбранный клиент должен также остановить или запустить симуляцию.

UDP: Команда отключения клиента.

Вариант 10

TCP: Реализовать возможность синхронной установки вероятностей появления физических и юридических лиц на текущем и одном из подключенных клиентов, т.е. при установке этих параметров на выбранном клиенте должны выставиться такие же параметры.

UDP: Команда перезагрузки (отключения, а затем повтороного подключения) клиента.

Вопросы для самопроверки

 

1. Что такое сокеты?

2. Какие типы сокетов существуют, чем они отличаются друг от друга?

3. Какое преимущество имеют потоковые сокеты?

4. Что такое IP-адрес и доменный адрес узла (хоста)?

5. Какой класс Java используется для представления адреса хоста?

6. Какой класс Java предназначен для работы с IP-адресами?

7. Каким образом задается адрес узла при создании объекта, отвечающего за адрес IP?

8. Что такое localhost?

9. Что такое ТСР/IP?

10. Как создается сокетное соединение «сервер-клиент»?

11. Какова последовательность действий приложений Java, необходимая для создания канала и передачи данных между клиентским и серверным приложением?

12. Можно ли оборачивать потоки ввода-вывода сокетов другими потоками ввода-вывода из java.io?

13. Почему сетевые программы в большинстве случаев являются многопоточными?

14. Каковы недостатки и преимущества дейтаграммных сокетов?

15. Что должны сделать приложения для работы с дейтаграммами?

16. Какие методы применяются для посылки и получения дейтаграмм?

 

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...