2011-08-25 4 views
3

기본 질문 : Android 2.2 이상에서 여러 Bluetooth 연결을 여는 경우 UUID는 RFCOMM 채널의 고유성을 보장하는 데 중요합니까?UUID와 상관없이 연결된 BluetoothSocket RFCOMM 채널이 고유합니까?

배경 : 여러 개의 (3 개 이상) 다른 Android 휴대 전화 (최소 Android 버전 2.2)에 상주하는 Android 애플리케이션을 만들고 싶습니다. 응용 프로그램의 각 인스턴스는 Bluetooth를 통해 서로 통신합니다. 따라서 각 응용 프로그램은 여러 개의 블루투스 연결을 동시에 열어 모든 참여 응용 프로그램과 통신합니다.

나는 적어도 chatroom 유형의 방식으로 N 개의 클라이언트를 모두 지원하기 위해 BluetoothChat 샘플 응용 프로그램을 확장했기 때문에 이것이 가능하다는 것을 알고 있습니다. 그래서 나는 여러 블루투스 연결을 동시에 열어 둘 수 있습니다.

"TCP/IP와 달리 RFCOMM은 한 번에 채널 당 하나의 연결된 클라이언트 만 허용하므로 대부분의 경우 BluetoothServerSocket에서 close()를 호출하는 것이 좋습니다 연결된 소켓을 수락 한 직후에. " (http://developer.android.com/guide/topics/wireless/bluetooth.html)

지금 채팅 룸 스타일의 BluetoothChat 응용 프로그램을 구현 한 결과, 동시 연결 결과 열기에 대한 내 접근법 다른 RFCOMM 채널의 연결에서 (그렇지 않으면 연결 실패 또는 누화가 발생합니다). 그러나, 어떤 RFCOMM 채널이 어떤 결과를 가져올 지 확신 할 수 없으며, 이것이이 질문의 내용입니다.

다수의 블루투스 연결을 여는 데 2 ​​가지 방법이 있습니다. 1. accept()를 반복해서 호출하여 여러 Bluetooth 연결을 허용하는 대신 동일한 BluetoothServerSocket 객체를 사용하여 listenUsingRfcommWithServiceRecord (String, UUID)를 받아 들일 수 있습니다. 2. 각각의 연결에 대해 동일한 UUID를 사용하는 대신 수동으로 관리하는 7 개의 UUID 세트가 있습니다. 즉, 각 accept()가 다른 UUID로 작성된 BluetoothServerSocket에 앉아 있도록하는 것입니다.

이제 설명서에서 내 이해는 listenUsingRfcommWithServiceRecord (String, UUID)가 청취를 위해 SDP 데이터베이스에 항목을 추가한다는 것입니다. 분명히, 허용 된 각 연결에 대해 서로 다른 SDP 데이터베이스 항목을 만드는 것이 적어도 각 연결에 대해 서로 다른 RFCOMM 연결이 사용되는 이유 중 일부입니다. 하지만 UUID는 여기에 영향을 미칩니 까? 같은 UUID를 사용하는 7 개의 스레드에서 메서드를 7 번 호출한다면 여전히 작동할까요? 아니면 다른 UUID가 다른 RFCOMM 채널을 사용하게합니까?

내 응용 프로그램에 대해 7 개의 다른 UUIDS를 관리해야하는 경우 분명히 문제는 연결이 열리고 닫히는 동안 사용 가능한 연결 UUIDS의 적절한 동기화가 거대한 번거 로움이 될 수 있다는 것입니다. 누군가 UUID가 listenUsingRfcommWithServiceRecord (String, UUID)가 호출 될 때 RFCOMM 채널 선택에 영향을 미치는지 확인하거나 거부 할 수 있다면 엄청난 도움이 될 것입니다.

는 (논의 - 더하지 연결 측 UUID의 영향은, createRfcommSocketToServiceRecord (UUID), 내 가정이 그것을 들어오는를 위해 보유하고있는 경우 아마 발신을 위해 보유하고 있다는 점이다.)

감사합니다 도움이 될 수 있습니다 사람에게.

답변

3

내가 수집 한 것으로부터 사용할 채널은 UUID로 결정됩니다. 동일한 채널에 여러 번 연결하면 실패합니다.

관련 문제