Android Bluetooth несколько клиентов на один хост - PullRequest
2 голосов
/ 14 марта 2012

Вот ситуация. Я создаю Android, который использует Bluetooth для обновления подключенных клиентов статуса друг друга. Идея состоит в том, чтобы хост соединения Bluetooth содержал многомерный массив, содержащий все эти характеристики. Каждый раз, когда клиент обновляет хост своего нового состояния, хост обновляет данные в массиве и затем отправляет их всем клиентам.

Конечно, для меня все это звучит как молоко и печенье, но, к сожалению, это не так. Я понимаю, что мне нужно иметь разъем Bluetooth на каждом конце, и один из них должен быть разъемом хоста. Таким образом, получить одно соединение кажется довольно простым. Но что, если я тогда захочу принять больше соединений? Я читал вокруг, и, очевидно, я должен создать новый поток для каждого соединения. Я не понимаю, как это будет работать, кто-то может объяснить, пожалуйста?

1 Ответ

2 голосов
/ 14 марта 2012

Причина, по которой вам нужен поток для каждого соединения, такова:

Представьте, что у вас есть два открытых сокета, sock1 и sock2.Чтобы читать из этих сокетов, вы можете вызвать что-то вроде

InputStream in1 = sock1.getInputStream();
InputStream in2 = sock2.getInputStream();

Теперь, чтобы читать из sock1, вы вызываете

in1.read(buffer);

, где «буфер» - это байтовый массив, в котором высохраните прочитанные вами байты.

Однако read () является блокирующим вызовом - другими словами, он не возвращается, и вы не можете выполнить следующую строку, пока не останется несколько байтов длячитать().Поэтому, если вы попытаетесь прочитать sock1, вы никогда не сможете прочитать sock2, и наоборот, если они находятся в одном потоке.

Таким образом, если у вас есть один поток на соединение, каждый поток может вызвать read() и дождитесь ввода.Если ввод поступает во время выполнения одного из других потоков, он ждет, пока не наступит очередь этого потока, и затем продолжится.

Чтобы реально реализовать это, все, что вам нужно сделать, это вставить код для обработки одного соединения вкласс, расширяющий Thread.

Здесь задействовано множество деталей - я бы предложил образец Android BluetoothChat в качестве хорошего учебника.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...