2012-03-23 1 views
6

У меня есть два устройства Android. Один работает как сервер, а другой - как клиент. Клиент подключается к серверу и запрашивает файл - это делается в одном потоке на клиенте и одном потоке на сервере, чтобы оба могли продолжать делать то, что они хотят.Можете ли вы установить несколько соединений Bluetooth между этими же двумя устройствами в Android?

Затем клиент пытается снова подключиться к серверу, чтобы запросить другой файл. Прямо сейчас я получаю java.io.IOException: Device or resource busy при попытке подключения (socket.connect()). Это потому, что Bluetooth (на Android) позволяет только один канал между двумя устройствами? (если бы это было другое устройство, это сработало бы, но если это то же самое, что и нет?) Обратите внимание, что обе попытки выполняются с тем же именем службы и UUID.

Даже если ошибка относится к моему коду, я хотел бы знать, если это так или нет.

Система: android 2.2.1, связанная с библиотекой bluecove bluetooth.

ответ

1

AFAIK, множественное соединение невозможно в случае соединения Bluetooth. Bluetooth - это интерфейс подключения по умолчанию Синхронизирован, поэтому возможно только одно соединение за раз. Таким образом, вы не можете выполнять несколько соединений.

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

+1

любезно предоставите источники – CuriousSid

+0

Тогда вы можете объяснить, например, как ноутбук может подключаться через Bluetooth к клавиатуре мыши и гарнитуры одновременно? – Nanoc

6

Определенно не с тем же UUID (универсальный UNIQUE Идентификатор).

Ссылка на который был взят из here

Может быть, с более чем одной. Вы можете подключить несколько устройств в стиле «Сервер/Клиент», вы можете попытаться установить одно из устройств в качестве сервера и запустить несколько клиентов на другом. Мое первое предположение было бы начать несколько потоков клиентов, но вам, возможно, придется найти способ изменить MAC-адрес для каждого из них.

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

Here Обсуждается возможность одновременного подключения нескольких клиентов на сервере. Я добрался туда от this question. (Я думаю, это может быть ваш самый близкий выстрел)

Here у вас есть дискуссия о одноранговых сетях.

+1

Я смог установить несколько параллельных соединений, отменив регистрацию SDP на текущем канале и зарегистрировав его снова на новом свободном канале, как только текущий канал будет выделен в результате «соединения» с устройством. UUID был таким же. Проблема возникает, когда 4-5 одновременных потоков клиентов пытаются подключиться. – CuriousSid

+0

У меня нет идей для этого. Поскольку вам удалось использовать тот же UUID, вы сможете открыть 7 клиентских подключений. Когда вы получаете ошибку занятости, все потоки перестают работать, или только ваш последний клиент не может присоединиться к сети? – caiocpricci2

+0

только последний клиент не может присоединиться, кстати, есть что-то особенное с 7? – CuriousSid