linux下bluetooth程式設計(七)SDP協議
Service Discovery Protocol(SDP)提供一種能力,讓應用程式有方法發現哪種服務可用以及這種服務的特性。
服務發現協議(SDP或Bluetooth SDP)在藍芽協議棧中對藍芽環境中的應用程式有特殊的含意,發現哪個服務是可用的和確定這些可用服務的特徵。SDP定義了bluetooth client發現可用bluetooth server服務和它們的特徵的方法。這個協議定義了客戶如何能夠尋找基於特定屬性的服務而不讓客戶知道可用服務的任何知識。SDP提供發現新服務的方法,在當客戶登入到正在操作的藍芽伺服器的一個區域時是可用的時。
Service discovery機制提供client應用程式偵測server應用程式提供的服務的能力,並且能夠得到服務的特性。服務的品質包含服務type或服務class.
SDP也提供SDP server與SDP client之間的通訊。SDP server維護著一個服務條目(service record)列表.每個服務條目描述一個單獨的服務屬性。 SDP client可以通過傳送SDP request來得到服務條目。
如果一個client或者依附於client之上的應用程式決定使用某個service. 它建立一個單獨的連線到service提供者。 SDP 只提供偵測Service的機制,但不提供如何利用這些Service的機制。Sam覺得,這裡其實是說:SDP只提供偵測Service的辦法,但如何用,SDP不管。
每個Bluetooth Device最多隻能擁有一個SDP Server。如果一個Bluetooth Device只擔任Client,那它不需要SDP Server。但一個Bluetooth Device可以同時擔當SDP Server和SDP client.
Service Record(Service 條目):
一個service是一個實體為另一個實體提供資訊,執行動作或控制資源。一個service可以由軟體,硬體或軟硬體結合提供。
所有的Service資訊都包含於一個Service Record內。一個Service Record 包含一個Service attribute(Service屬性) list.
在一個SDP Server內,每個Service Record擁有一個32-bit的唯一性資料。通常,這個唯一性只是在每個SDP Server內部。 如果SDP Server S1 和SDP Server S2擁有同樣的一個Service Record。那他們在不同SDP Sever內的獨特數值並不一定相同。
SDP在SDP Server增加或減少Service Record時,並不會通知SDP client.
Service Attribute(Service 屬性):
每個Service屬性描述servcie的特性.一個Service Attribute由2部分:
Attribute ID + Attribute Value。
Attribute ID:16-bit無符號整數,用於區別一個Service Record內的其它屬性。
Attribute Value:Attribute值。
Service Class:
每個Service 都是某個Service Class的例項. Service Class定義了Service Record中包含的Service 屬性。屬性ID,屬性值都被定義好了。
每個Service Class也有一個獨特ID。這個Service Class識別符號包含在屬性值ServiceClassIDList屬性中。並描繪為UUID。自從Service Record中的屬性格式以及含義依賴於Service Class後,ServiceClassIDList屬性變得非常重要。
Searching For Service:
Service Search transaction(事務?)允許client得到Service Record Handle。一旦SDP Client得到Service Record Handle,它就可以請求這個Record內具體屬性的值。
如果某個屬性值UUID,則可以通過查詢UUID查到這個屬性。
UUID: universally unique identifier.(唯一性識別符號)
SDP協議棧使用request/response模式工作,每個傳輸過程包括一個request protocol data unit(PDU)和一個response PDU. SDP使用L2CAP連線傳輸資料。在傳送Request PDU但未收到Response PDU之前,不能向同一個server再傳送Request PDU。
PDU:protocol Data unit
PDU ID:用來識別PDU。
TransactionID:
用來識別Request PUD以及Response PUD。並用來對比某個Response PUD是否對應著Request PUD。
相關文章
- linux下bluetooth程式設計(八)SDP層程式設計Linux程式設計
- linux下bluetooth程式設計(二)blueZ協議棧Linux程式設計協議
- linux下bluetooth程式設計(五)bluetooth與socketLinux程式設計
- linux下bluetooth程式設計(三)HCI層程式設計Linux程式設計
- SDP協議介紹協議
- linux下bluetooth程式設計(一)基礎概念Linux程式設計
- linux下bluetooth程式設計(四)L2CAP層程式設計Linux程式設計
- linux下bluetooth程式設計(六)L2CAP層程式設計例項Linux程式設計
- 藍芽(Bluetooth)音訊協議藍芽音訊協議
- 面向協議程式設計協議程式設計
- Swift Protocol 詳解 - 協議&面向協議程式設計SwiftProtocol協議程式設計
- Linux網路程式設計--TCP/IP協議(轉)Linux程式設計TCP協議
- SMTP協議初探(二)----linux下c程式設計實現發郵件協議LinuxC程式程式設計
- 面向協議程式設計與 Cocoa 的邂逅 (下)協議程式設計
- 淺析面向協議程式設計協議程式設計
- ios 面向協議程式設計資源iOS協議程式設計
- 網路程式設計UDP協議方式程式設計UDP協議
- iOS - Swift 面向協議程式設計(二)iOSSwift協議程式設計
- iOS - Swift 面向協議程式設計(一)iOSSwift協議程式設計
- Swift中的面向協議程式設計Swift協議程式設計
- 計算機網路七層協議計算機網路協議
- Swift 面向協議程式設計的那些事Swift協議程式設計
- Java Tcp協議socket程式設計學習JavaTCP協議程式設計
- TCP/IP協議族——高效能Linux伺服器程式設計TCP協議Linux伺服器程式設計
- Linux 高效能伺服器程式設計-IP 協議詳解Linux伺服器程式設計協議
- Linux 高效能伺服器程式設計-TCP/IP 協議族Linux伺服器程式設計TCP協議
- Linux 高效能伺服器程式設計- TCP 協議詳解Linux伺服器程式設計TCP協議
- 網路七層協議協議
- 從Swift3的標準庫協議看面向協議程式設計(一)Swift協議程式設計
- 面向協議程式設計的一些思考協議程式設計
- Swift使用協議加泛型程式設計(一)Swift協議泛型程式設計
- 《Unix 網路程式設計》15:Unix 域協議程式設計協議
- ModbusTCP協議簡介與程式設計流程圖TCP協議程式設計流程圖
- 計算機網路之七:TCP協議(1)計算機網路TCP協議
- Linux網路程式設計之原始套接字-ping協議實現Linux程式設計協議
- 網路程式設計協議(TCP和UDP協議,黏包問題)以及socketserver模組程式設計協議TCPUDPServer
- Swift 中的面向協議程式設計:是否優於物件導向程式設計?Swift協議程式設計物件
- Java 網路程式設計 – TCP協議基本步驟Java程式設計TCP協議