- •Что Вам необходимо?
- •Создание miDlet-а
- •О том, что скрыто от наших глаз
- •А дальше?
- •Ресурсы
- •Инсталяция и запуск Tomcat
- •Написание исходного кода Servlet-а
- •Компиляция Servlet – а
- •Развертывание Servlet-а
- •Как обратиться к Servlet-у из miDlet-а
- •Замечания
- •Заключение
- •Дейтаграммы
- •Получение Web контента
- •Когда какой протокол использовать?
- •Стек протоколов
- •Профили
- •Bluetooth устройства и сети
- •Системные требования
- •Java api For Bluetooth — организация и пакеты
- •Анатомия miDlet-ов, использующих jsr 82
- •Использование Java apIs for Bluetooth
- •Использование Bluetooth в j2me приложениях. (jsr-82) - Часть 2. Обзор Connection и Device Management api Обзор Connection api
- •Типы Bluetooth соединения
- •Создание соединения
- •Ожидание соединения
- •Отправка и получение даннях
- •Обзор Device Management api
- •Удаленное устройство
- •Класс устройства
- •Получение информации о настройках Bluetooth устройства
- •Интерфейсы pim api
- •Классы pim api
- •Использование pim api
- •Использование эмулятора j2me Wireless Toolkit 2.2 для тестирования pim списков
- •Особенности спецификации Sony Ericsson
- •Свойства системы
- •Классы и интерфейсы FileConnection api
- •Операции ввода/вывода
- •Получение информации о файлах и каталогах
- •Вычисление Экспоненты
- •Гиперболические функции
- •Вычисление натурального логарифма
- •Вычисление арксинуса и арккосинуса
- •Вычисление арктангенса
- •Обзор mmapi
- •Механизм обработки мультимедмйной информации
- •Mmapi пакеты
- •Использование mmapi
- •Последовательности нот
- •Проигрывание мультимедийных файлов
- •Воспроизведение видео
- •Использование камеры
- •Поддерживаемые форматы
- •Ограничения использования mmapi в wtk
- •Пример простого медиаплеера
- •Создание midp приложения с использованием Visual Designer-а.
- •Редактирование Java исходников
- •Создание midp приложений с использованием Source Editor Создание нового j2me midp проекта
- •Редактирование Java исходников
- •Компиляция и запуск проекта
- •Выбор платформы эмулятора
- •Использование конфигурирования
- •Добавление конфигурации
- •Настройка конфигурации
Ожидание соединения
Ожидание соединения складывается из:
Создания сервера соединения, используя подходящий механизм прослушивания:
Для RFCOMM — StreamConnectionNotifier
Для L2CAP — L2CAPConnectionNotifier
Ожидания принятия и открытия нового соединения с помощью метода acceptAndOpen().
Listing 1. Обработка входящего L2CAP соединения
L2CAPConnectionNotifier server = null;
byte[] data = null;
int length;
:
:
try {
// Получаем ссылку на локальное устройство и делаем его доступным для поиска
LocalDevice local = LocalDevice.getLocalDevice();
local.setDiscoverable(DiscoveryAgent.GIAC);
// Инициализируем прослушивание L2CAP соединения
server = (L2CAPConnectionNotifier)
Connector.open("btl2cap://localhost:1020304050d0708093a1b121d1e1f100");
while (!done) {
L2CAPConnection conn = null;
// Ожидаем входящее L2CAP соединение
conn = server.acceptAndOpen();
// Читаем входящие данные
length = conn.getReceiveMTU();
data = new byte[length];
length = conn.receive(data);
:
:
}
} catch (Exception e) {
... Обработка исключительных ситуаций
}
Listing 2. Обработка входящего потокового соединения.
StreamConnectionNotifier server = null;
byte[] data = new byte[256];
int length;
:
:
try {
// Получаем ссылку на локальное устройство и делаем его доступным для поиска
LocalDevice local = LocalDevice.getLocalDevice();
local.setDiscoverable(DiscoveryAgent.GIAC);
// Инициализируем прослушивание потокового соединения
server = (StreamConnectionNotifier)Connector.open(
"btspp://localhost:11111111111111111111111111111111");
while (!done) {
StreamConnection conn = null;
// Ожидаем входящее потоковое соединение
conn = server.acceptAndOpen();
// Читаем входящие данные
InputStream in = conn.openInputStream();
length = in.read(data);
:
:
}
} catch (Exception e) {
... Обработка исключительных ситуаций
}
Отправка и получение даннях
Для отправки и получения потоковых данных используется StreamConnection, а для отправки и получения L2CAP данных — L2CAPConnection:
Listing 3. Отправка потока данных с помощью L2CAPConnection.
String url = "...";
int index = 0;
L2CAPConnection con = null;
transmitBuffer[] temp = null;
byte[] data = ...;
try {
// Открываем соединение с сервером
con = (L2CAPConnection)Connector.open(url);
// Задаем transmit MTU (максимальный размер данных, который может быть передан)
int MTUSize = con.getTransmitMTU();
// Создаем буфер размером MTU.
transmitBuffer = new byte[MaxOutBufSize];
:
:
while (index < data.length) {
// Отправка данных ... перемещение MTUSize байт из буфера передаваемых данных
if ((data.length - index) < MTUSize) {
System.arraycopy(data, index, transmitBuffer, 0, data.length - index);
} else {
System.arraycopy(data, index, transmitBuffer, 0, MTUSize);
}
// Отправка данных и обновление индекса данных
con.send(transmitBuffer);
index += MTUSize;
// Очищение буфера передаваемых данных
for (int=0; i<MTUSize; i++) transmitBuffer[i] = 0;
}
// Закрытие исходящего соединения и потока.
con.close();
} catch (Exception e) {
... Обработка исключительных ситуаций.
}
Listing 4. Отправка потока данных с помощью StreamConnection.
String url = “…”;
OutputStream os = null;
StreamConnection con = null;
:
:
try {
// Открываем соединение с сервером
con =(StreamConnection)Connector.open(url);
// Открываем исходящий поток
os = con.openOutputStream();
// Отправляем поток данных на удаленное устройство
os.write(data.getBytes());
// Закрываем исходящее соединение и поток
os.close();
con.close();
} catch (Exception e) {
... Обрабатываем исключительные ситуации
}