2011-02-15 3 views
3

나는 테스트 베드에있는 여러 장치 사이에 블루투스 피코넷을 설정하고 있습니다. 이 네트워크의 토폴로지는 모든 장치에 알려져 있습니다.안드로이드에서 블루투스 피코넷 설정하기

테스트 베드의 장치는 Ubuntu Desktop PC와 Android (Eclair) 장치입니다. 이제, 나는 이러한 장치들 사이에서 결정적인 방식으로 마스터 노예 관계를 수립하는 방법을 찾고 있습니다. 특히, 나는 안드로이드 장치를 마스터로 설정하고 7 개의 다른 장치로 다중 연결을 열 수있는 방법을 찾고 있습니다.

bluez 스택과 NDK를 사용하여 기본 구현을 살펴 봤지만 내 장치 (Samsung GT 15503)의 bluez 스택 구현이 내가 추측 한 표준을 따르지 않으며 hcitool, hciconfig와 같은 일반 앱도 그렇지 않습니다. 작업.

따라서 공식 SDK를 사용해 보았고 내 노트북과 RFCOMM 소켓을 설정하는 데 성공했습니다. (참조로 블루투스 채팅 샘플 앱 사용). 하지만 나는 같은 BluetoothServerSocket을 사용하여 두 개 이상의 장치를 연결하려고 시도 할 시점에 처해있다. 원래 소켓을 닫지 않으면 새로운 연결을 열 수 없습니다.

이 점에 대한 제안은 크게 감사드립니다.

답변

8

나는 마침내 내가 잘못하고 있었는지 알아 냈어. 분명히 BluetoothServerSocket에서 accept 메소드를 호출하고 소켓을 다시 얻을 때마다 accept를 다시 호출하기 전에이 소켓을 닫아야한다.

는 내가 7 다른 UUID를 생성하고 듣는 이들의 UUID의 에 대한 연결을 허용하도록 BluetoothServerSocket을 사용하여 원하는 피코넷을 설정하는이 문제를 해결했다. 특정 UUID에 대한 연결이되면 해당 서버 소켓을 닫고 다음 UUID에 대해 다른 소켓을 다시 엽니 다.

다음 스 니펫은 내가받은 아이디어를 설명합니다. BTClickLinkCompete.

for (int i = 0; i < 7; i++) { 
       BluetoothServerSocket myServerSocket = mBtAdapter 
         .listenUsingRfcommWithServiceRecord(srcApp, mUuid.get(i)); 
       BluetoothSocket myBSock = myServerSocket.accept(); 
       myServerSocket.close(); // Close the socket now that the connection 
       //has been made 
       //Do stuff with the socket here, like callback to main thread 
} 

여기서 mUuid는 7 개의 다른 uuids를 저장하는 배열입니다. 서버에 연결하려는 클라이언트도이 uuids를 소유하며 이미 서버에 연결된 클라이언트의 수를 모르기 때문에 순서대로 하나씩 시도합니다.

+0

http://developer.android.com/reference/android/bluetooth/BluetoothServerSocket.html#accept(int)에서 문서가 말하는 내용과 다릅니다. 이것은 BluetoothServerSocket을 재사용하여 후속 들어오는 연결을 닫고 다시 만들지 않고 모두 동일한 UUID에서 받아 들일 수 있다고합니다. – Tom

+0

@Rajkishan, 몇 명의 고객을 연결할 수 있습니까? 마스터에 4 명 이상의 노예를 연결할 수 없습니다. 문제에 대해 저를 도울 수 있습니까? 나는 또한 동일한 코드를 따르고 있습니다. – skygeek

+0

@Rajkishan 당신이 샘플 코드를 공유하시기 바랍니다, 그것은 중대한 help.what 안드로이드 워드 프로세서에서 여러 개의 연결이 안드로이드에서 가능하지 않은 것으로 이해하거나 내가 어떤 샘플을 못했을 수도 있습니다. 코드를 공유하십시오. –

1

아마이 도움이됩니다 : 당신은 기억 각 연결 (BluetoothServerSocket에서) 방법 accept() 전화를해야

.

당신은 당신이 전화를 한 후 해당 연결에 수행 할 작업으로 새 스레드를 시작해야하고 연결을받을 때 accept() 다시

관련 문제