2012-03-23 3 views
6

두 개의 Android 기기가 있습니다. 하나는 서버 역할을하고 다른 하나는 클라이언트 역할을합니다. 클라이언트는 서버에 연결하여 파일을 요청합니다. 이는 클라이언트의 한 스레드와 서버의 한 스레드에서 수행되므로 둘 다 원하는대로 계속 수행 할 수 있습니다.Android에서 동일한 두 장치간에 여러 Bluetooth 연결을 설정할 수 있습니까?

그러면 클라이언트가 서버에 다시 연결하여 다른 파일을 요청합니다. 현재 (socket.connect()) 연결을 시도 할 때 java.io.IOException: Device or resource busy이 표시됩니다. 블루투스 (Android)는 두 기기간에 하나의 채널 만 허용하기 때문입니까? (다른 장치 인 경우 작동하지만 동일하면 동일하지는 않습니까?) 두 시도 모두 동일한 서비스 이름과 UUID로 이루어집니다.

오류가 내 코드에만 적용되는 경우에도 이것이 사실인지 아닌지 알고 싶습니다.

시스템 : android 2.2.1은 bluecove 블루투스 라이브러리와 통신합니다.

답변

1

AFAIK, 블루투스 연결의 경우 다중 연결이 불가능합니다. 블루투스 연결 API는 기본적으로 동기화되어 있으므로 한 번에 하나의 연결 만 가능합니다. 따라서 여러 연결을 수행 할 수 없습니다.

그러나 그것의 2 초 동작을 수행하여 다른 연결을 생성하고 정상적인 멀티 태스킹 운영 체제의 발생에 추천 초 동작을 수행하는 하나의 연결을하기와 같은 다른 방법으로 할 수있다.

+1

친절하게 소스를 제공하십시오. – CuriousSid

+0

그런 다음 노트북을 블루투스를 통해 키보드와 마우스 및 헤드셋에 동시에 연결할 수있는 방법을 설명 할 수 있습니까? – Nanoc

6

확실히 동일한 UUID (범용 고유 식별자)가 아닙니다. 그것에 대해

참조 개 이상의와 아마 here

에서 가져온 것입니다. 서버/클라이언트 스타일로 여러 장치를 연결할 수 있습니다. 장치 중 하나를 서버로 설정하고 다른 클라이언트에서 여러 클라이언트를 시작할 수 있습니다. 내 첫 번째 추측은 여러 클라이언트 스레드를 시작하는 것입니다,하지만 당신은 각각의 MAC 주소를 변경하는 방법을 찾아야 할 수도 있습니다.

Here 당신이 당신의 맥 주소를 변경하는 방법에 대한 또 다른 토론을 찾을 수 있지만 뿌리 장치에서 작동 할 수 있습니다. 나는 뿌리가없는 사람들을 위해 다른 것을 찾을 수 없습니다. 프로그래밍 방식으로이 작업을 수행하는 방법에 대해서는 알지 못하지만 시작을 줄 수도 있습니다.

Here 여러 클라이언트를 동시에 서버에 연결하는 방법에 대한 설명이 있습니다. 나는 this question에서 거기에 도착했다. 당신이 피어 - 투 - 피어 네트워크에 대한 토론이

Here (I이있을 수 있습니다 당신의 가장 가까운 샷을 생각한다).

+1

장치에서 '연결'의 결과로 현재 채널이 할당되면 현재 채널에서 SDP 등록을 취소하고 새 무료 채널에 SDP를 다시 등록함으로써 여러 병렬 연결을 설정할 수있었습니다. UUID는 동일합니다. 4-5 개의 동시 클라이언트 스레드가 연결을 시도 할 때 문제가 발생합니다. – CuriousSid

+0

나는 그 아이디어가 없다. 동일한 UUID를 사용하면 7 개의 클라이언트 연결을 열 수 있습니다. 바쁜 오류가 발생하면 모든 스레드가 작동을 멈추거나 최신 클라이언트가 그물에 연결할 수 없습니까? – caiocpricci2

+0

최신 클라이언트 만 참여할 수 없습니다. btw는 7과 특별한 뭔가가 있습니까? – CuriousSid

관련 문제