Универсальный интернет-протокол передачи дейтаграмм (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:= Значимуй системный номер порта>