Я пытаюсь создать приложение Bluetooth, которое будет одновременно прослушивать входящие соединения (как сервер) и искать доступные соединения (как клиент), используя Java и BlueCove. Предполагается, что два устройства Bluetooth (например, смартфоны) могут автоматически обнаруживать друг друга и начать какой-то обмен файлами или другую совместную работу, как только они окажутся в пределах диапазона передачи (это для эксперимента в оппортунистической сети).
У меня есть базовый клиент Bluetooth, работающий в своем собственном потоке, и базовый сервер Bluetooth, работающий в своем собственном потоке, и я пытаюсь заставить их работать одновременно. Это было наполовину успешно, но, по какой-то причине, одно устройство всегда заканчивает тем, что получало входящие соединения и никогда не находило другие устройства, и одно устройство заканчивало тем, что находило другие соединения, но никогда не получало их (обе машины используют идентичный код с идентичным Bluetooth ключи - одна машина в Windows XP и другая в Windows 7). До сих пор я пробовал это только с двумя устройствами.
Я получаю исключения, такие как:
"java.io.IOException: не удается запросить удаленное устройство"
"java.io.IOException: Ошибка поиска имени; [10108] Такая служба не известна. Служба не найдена в указанном пространстве имен."
"Не удалось подключиться; [10051] Была предпринята попытка операции с сокетом в недоступной сети."
Оба потока должны совершать вызовы LocalDevice и StreamConnection , поэтому мне нужно синхронизировать доступ потоков к этим ресурсам или потоки могут обращаться к ним одновременно? Могу ли я заблокировать эти объекты или мне нужно циклически выполнять потоки, чтобы клиент спал, пока сервер ожидает подключения, и наоборот (я стараюсь не просто зацикливать их, потому что последовательность обнаружения устройств в Bluetooth такова). медленный, и клиентский поток будет держать серверный шаг в ожидании большую часть времени)?
Я неопытен в многопоточности и все еще изучаю свой способ работы с Bluetooth, поэтому, если у кого-то есть советы или информация, я был бы очень признателен.