Универсальный интернет-протокол передачи дейтаграмм (Internet Universal Datagram Protocol (UDP)) является одним конкретным примером протокола передачи дейтаграмм. В действительности это протокол, поддерживаемый некоторыми реализациями MIDP. Он встроен непосредственно поверх интернет-протокола (Internet Protocol (IP)) сетевого уровня. Помните, что в соответствии со спецификацией MIDP, HTTP 1.1 является единственным протоколом, который должны поддерживать реализации, все остальные — необязательно. Разработчики должны помнить об этом при учете портативности приложений.
Использование протокола UDP дает приложениям MIDP другой стандартный механизм для взаимодействия с четко определенными сетевыми службами. В главе 11 вы узнаете о некоторых обстоятельствах, при которых использование протоколов передачи дейтаграмм является более предпочтительным, чем высокоуровневых протоколов.
В UDP отсутствуют многие свойства, которые имеются в транспортных протоколах, как, например, в TCP, такие, как согласование вариантов соединений, повторная сборка пакетов, сквозной контроль потока, управление окнами, устранение ошибок, разбиение на части и гарантированная доставка. Он отказывается от этих свойств в пользу очень эффективной быстрой пересылки. Приложения MIDP могут использовать дейтаграммные соединения, когда им нужны быстрые соединения без перехода из состояния в состояние и когда не требуется гарантированная пересылка.
В таблице 8.9 перечислены методы интерфейса DatagramConnection. Вы можете видеть, что это относительно простой интерфейс. Эта простота отражает низкоуровневую природу базового протокола реализации. Сравните это с интерфейсом HttpConnection, чьи методы отражают относительно более сложную природу сообщений протокола HTTP и используют поля сообщений типа MIME для определения семантики сообщения. В отличие от протоколов уровня приложений, таких как, HTTP, протоколы дейтаграмм не определяют атрибуты, которые отражают природу полезной нагрузки, которую они транспортируют.
Название метода DatagramConnection — Описание
int getMaximumLength() — Выдает максимально возможную длину дейтаграммы, определен базовым протоколом реализации
int getNominalLength() — Выдает номинальную длину дейтаграммы
Datagram newDatagram(byte [] buf, int size) — Создает новый объект дейтаграммы, получая данные из указанного массива
Datagram newDatagram(byte[] buf, int size, String addr) — Создает новый обьект дейтаграммы с указанными массивом данных и с указанным адресом назначения
Datagram newDatagramfint size() — Создает новый обьект дейтаграммы
Datagram newDatagram (int size, String addr) — Создает новый обьект дейтаграммы с указанным адресом
void receive (Datagram dgram) — Получает дейтаграмму и забирает ее данные для заполнения данного аргумента дейтаграммы
void send (Datagram dgram) — Посылает указанную дейтаграмму
Чтобы использовать дейтаграммное соединение, приложение-клиент выполняет следующие шаги:
1. Оно создает объект DatagramConnection.
2. Получает объект Datagram из объекта DatagramConnection.
3. Затем оно заполняет объект Datagram данными, составляющими полезную нагрузку, которая будет послана принимающему объекту.
4. Запрашивает соединение о посылке дейтаграммы.
5. Запрашивает соединение о получении ответной дейтаграммы.
Чтобы создать дейтаграммное соединение, вам все равно нужно использовать класс Connector. Вы указываете, что желаете получить дейтаграммное соединение, поставляя строковую дейтаграмму в поле схемы URI, который вы передаете одной или трем формам метода Connector.open(). Полный синтаксис дейтаграммных адресов следующий:
address:= <протокол>://<адресат>
protocol:= «datagram»
target:= [<хост>]:<порт>
host:= Значимое DNS-имя хоста или его номер>
port:= Значимуй системный номер порта>