Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные работы. Мобильные устройства.doc
Скачиваний:
2
Добавлен:
01.05.2019
Размер:
1.8 Mб
Скачать

Ожидание соединения

Ожидание соединения складывается из:

  1. Создания сервера соединения, используя подходящий механизм прослушивания:

  • Для RFCOMM — StreamConnectionNotifier

  • Для L2CAP — L2CAPConnectionNotifier

  1. Ожидания принятия и открытия нового соединения с помощью метода 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) {

... Обрабатываем исключительные ситуации

}