簡單服務發現協議 SSDP 程式設計指導

2022-08-26 01:09:09 字數 1257 閱讀 1407

本文主要講解如何使用ssdp進行程式設計,不涉及過多關於ssdp的理論知識

網上對ssdp理論介紹的一大把,缺乏從程式設計角度的乙個指導,這裡不會長篇大論ssdp理論,只是根據實際編碼經驗對用ssdp進行編碼做個淺顯的指導,希望能讓同行少走一些彎路。

ssdp是在httpu和httpmu基礎上實現的協議,httpu就是能在udp上傳輸的http協議(http協議本身是基於tcp的),httpmu是在udp上實現的http協議的多址傳送。從程式設計的角度來理解這段話,只需要抓住幾個重點就可以了:udphttp多址(multicast)。udp在這裡表示ssdp底層是通過udp傳輸的,多址表示ssdp是通過組播的方式工作的,那http在這裡扮演什麼角色呢?  我們先來回顧下普通的http協議(後面就直接稱http協議),http協議是通過tcp傳輸的,而http本身只是規定了一些格式(就是瀏覽器和服務端都能理解的乙份協議),從程式設計角度看,實際上http資料報也是普通的通過tcp傳輸的資料流,只是http本身規定了它的頭(header)格式,而這個header裡面會有乙個content-length欄位,標明http包體的長度,所以我們利用http本身的格式可以很容易的從tcp資料流中解析出http包。在ssdp協議裡面,http就是扮演了一種格式,ssdp的格式就是利用http的資料報格式。

所以從程式設計角度看,可以用這樣一句話總結ssdp:ssdp是基於udp通訊利用組播來工作的具有http格式的協議。理解了這些之後,我們就會驚奇的發現,當需要在區域網內搜尋裝置時,我們完全可以採用udp組播的方式來自定義一套私有協議啊

前面我們知道了ssdp是基於udp的協議,那麼服務端實現ssdp伺服器就很簡單了,只需要開啟乙個udp監聽,監聽位址為組播位址,監聽埠可以隨意(ssdp預設埠是1900,實際上我們編碼時可以隨意採用哪個埠),解析收到的udp包時採用http協議就好了。具體**我就不放這裡了,只要注意udp監聽要開啟在組播位址上就好了。

客戶端就是建立乙個基於udp的socket,往組播位址上(埠是服務端開啟的監聽埠)傳送http協議的訊息就好了。

剛開始接觸ssdp的時候會很懵,網上都是一大堆理論講解,有時候可能會看的雲裡霧裡,但是如果能夠看到ssdp的本質而不拘泥於ssdp協議本身具有哪些method、header(前面說了ssdp採用的就是http協議的格式,所以也會有method、header),就會發現ssdp還是很簡單的乙個協議。

BLE SDP服務發現協議

sdp的全稱是service discovery protocol,中文是服務發現協議。sdp 服務發現協議 是藍芽協議體系中的核心協議,是藍芽系統重要組成部分,是所有使用者模式的基礎。在藍芽系統中 客戶只有通過服務發現協議才能獲得裝置資訊 服務資訊及服務特徵,才能在此基礎上建立相互間的連線。通過這...

簡單介紹 服務發現

服務發現是指使用乙個註冊中心來記錄分布式系統中的全部服務的資訊,以便其他服務能夠快速的找到這些已註冊的服務。從客戶端角度來看,註冊中心起到的作用包含兩個 1 伺服器熱插拔 但是,要仔細思考乙個問題?客戶端的數量本來就是大量存在的,隨時都有可能上線和下線,讓註冊中心和客戶端之間保持長連線是否合理?我覺...

EasyTCP 伺服器簡單自定義協議程式設計

在伺服器客戶端通訊的時候,並不是像簡單的echo伺服器那樣,還是傳送特定的資料報協議。資料報的協議可以用自定義結構體定義。自定義協議分簡單分為訊息頭,和內容,訊息頭具有訊息的長度,和型別,使用繼承的方法,簡單實現 ifndef messageheader hpp define messagehead...