SDP(SERVICE DISCOVERY PROTOCOL)

发布时间 2023-12-22 16:21:21作者: 踏浪而来的人

SDP是基于C/S架构的,即客户端可以发送请求来获取服务端的信息

客户端和服务端不是固定的,一个设备既可以做客户端也可以做服务端,即谁发出请求谁做客户端,谁发出响应谁就做服务端。

 

服务记录:

  

 每个profile都会提供一个服务记录,即通过sdp就能发现该profile所支持的一些信息,以便以后连接。如耳机支持a2dp、avrcp、hfp、spp,那么在耳机中就会有三条服务记录

每条服务记录必有ServiceRecordHandle(attribute ID 0x0000)和 ServiceClassIDList两个属性,ServiceRecordHandle用来唯一的标识某一条服务记录,ServiceClassIDList是表示该服务记录是干什么的(即是什么profile),即通过ServiceRecordHandle找到服务记录,通过ServiceClassIDList知道这条服务记录是干什么的。

如在spp的服务记录中,ServiceRecordHandle为1000,在hfp的服务记录中,ServiceRecordHandle为1001,那么在SDP_SERVICE_SEARCH_RSP PDU中,耳机就能将ServiceRecordHandleList当做参数放在这个responds的pdu中,这样手机就能拿到耳机所支持的服务记录(即手机就知道了耳机所支持的profile)

 这就是spp的服务记录所包含的属性,其他profile也类似。

 

服务属性:

ServiceRecordHandle:用来唯一的标识某一条服务记录

ServiceClassIDList:表示该服务记录是干什么的(即是什么profile)

ProtocolDescriptorList:这条属性是描述该条服务记录(某个profile)底层用的哪些协议

 BluetoothProfileDescriptorList:用来描述本身profile的一些细节,如profile的版本