블루투스의 uuid
보통 pc상에서 네트워크 프로그래밍 할 때 ip로 상대방 단말 인식하고 port로 서비스를 식별하는데요.
블루투스의 경우는 어떻게 되는건가요?
uuid란 것이 있는데 이건 블루투스의 상위 프로토콜에 대한 id라는 말도 있고 port처럼 남는 거 아무거나 써서 어플리케이션을 식별하는 것 같진 않아서요.
흔한 예로 두 모바일 디바이스가 블루투스 통신을 한다고 했을때...
디바이스 a 디바이스 b
app a app a
이렇게 디바이스 a와 디바이스 b가 connect 되어서 app a들이 블루투스 통신을 하고 있으면,
디바이스 a 디바이스 b
app a app a
app c app c
app c가 두 단말에서 실행되어 블루투스 통신을 하려고할 때... 혹시 이런 경우의 개발을 해보신 분이 계신가요?
discover - paring - connect의 과정을 거치는데 app a들이 서로 통신을 할 때는 이미 connect 상태입니다.
여기서 app c가 실행되어 서로 통신을 하려면 디바이스간 연결된 정보로부터 소켓을 생성하면 될 것 같은데 안드로이드, 타이젠, ios 어느쪽도 관련 api를 제공하지 않는 것 같습니다. 예제를 봐도 그저 처음 discover 부터 연결하는 예제뿐 이미 연결이 되어있는 상태에서의 경우는 없네요.
그렇다고 디바이스 별로 하나의 어플리케이션만 블루투스 통신이 가능할리는 없고...
안드로이드로 보면
BluetoothAdapter, BluetoothDevice, BluetoothSocket, BluetoothServerSocket이 있는데 app c는 BluetoothSocket을 연결된 BluetoothDevice로부터 얻어와서 connect하면 되는 것인지... 이 경우의 connect는 디바이스 a와 b의 connect와 다른 것인지... 어플리케이션과 디바이스의 connect가 어떻게 구분되는 것인지 헷갈리는 것 같기도 하네요.
UUID 자체는 128bit의 단순한 숫자에
UUID 자체는 128bit의 단순한 숫자에 불과하구요.
(블루투스에서는 128bit의 끝자리만 이용하는 16bit길이의 short UUID도 사용합니다.)
UUID를 보통 Serivce의 식별자로 이용합니다.
Bluetooth - Service Discorvery Protocol 우선 보시고,
(https://en.wikipedia.org/wiki/List_of_Bluetooth_protocols#Service_discovery_protocol_.28SDP.29)
L2CAP Port == TCP/UDP Port와 동일 개념이긴 한데, tcp/udp 서버와 다르게
random 하게 할당 받는다고 생각하세요. 대신 Service UUID로 구분 지어서 접속 요청하게 됩니다.
UUID설명말고 질문자가 원하는 답변은 구글링하면
UUID설명말고 질문자가 원하는 답변은 구글링하면 바로 나오네요.
https://groups.google.com/forum/#!topic/android-developers/adeBD275u30
댓글 달기