1.1 UPnP Introduction
“通用隨插即用”(UPnP)是 Microsoft Windows 中一種支援網路裝置點對點“隨插即用”功能的體繫結構。UPnP 規範的設計目的是簡化裝置和網路服務的安裝與管理。UPnP通過一種無驅動程式的、基於標準的協議機制來完成裝置和服務的尋找與控制。“通用隨插即用”裝置可自動設定網路定址,宣布它們在一個網路子網上的存在,並允許說明裝置與服務說明的交換。一台 Windows Me或以上電腦可作為一個 UPnP 控制點,通過 Web 或應用程式介面來發現和控制裝置。
1.2 UPnP Terminology
操作 - 用於觸發服務以執行功能的命令。
控制點 - 檢索“通用隨插即用”服務和裝置說明的軟體,它會將操作發送到服務,並從服務中接收事件。
裝置 - 一項或多項服務的容器物件,它可以是物理裝置,例如,攜帶型攝像機,也可以是邏輯裝置,例如,一台起著攜帶型攝像機作用的電腦。
事件- 從裝置發送到控制點的訊息,用來使已預訂的控制點總能知道裝置的狀態。
服務 - 可通過控制點控制的裝置功能。
預訂 - 控制點與服務之間的一種關係。1.3 Five Stage of UPnP
發現 - “通用隨插即用”裝置會使用“簡單服務發現協議”(SSDP) 向其他裝置和控制點宣告其在網路上的存在。新添加的控制點會使用 SSDP 來發現網路上的“通用隨插即用”裝置。在裝置和控制點之間交換的資訊只限於一些發現訊息,它們提供關於裝置及其服務的基本資料,還帶有一個說明 URL,後者可用來獲得裝置的其他資訊。
說明 - 通過使用在發現過程中提供的 URL,控制點可接收到關於裝置的 XML 格式的資訊,如製造商、型號和序號。另外,說明過程還可以包括嵌入裝置、嵌入服務和用於訪問裝置功能的 URL 的列表。
控制 - 控制點使用說明過程中提供的 URL 來訪問附加的 XML 格式的資訊,此資訊說明“通用隨插即用”裝置服務可對哪些操作做出響應以及各種操作的參數。控制訊息採用 XML 格式,使用的是“簡易物件存取通訊協定 (SOAP)”(SOAP)。
事件 - 如果一個控制點預訂了一項服務,則該服務將向此控制點發送事件訊息,以宣布裝置狀態的改變。事件訊息採用 XML 格式,而且使用的是“通用事件通知結構”(GENA)。
展示 - 如果一個“通用隨插即用”裝置提供了一個展示 URL,則可以用瀏覽器來提供者控制功能、裝置或服務資訊,或製造商實現的任何特定於裝置的能力。1.4 How to add UPnP Support in your Application
本來想自己編一個Fake UPnP Device的,可是到Microsoft網站一看,WinXP下已經提供了供UPnP開發的COM組件了,並且支援UPnP控制點和裝置的開發。有興趣的可以參考MSDN上" Win32 and COM Development >Network Communication >UPnP APIs"下的"Device Host API"和","Control Point API"部分的內容。
Linux下也有開源UPnP棧libupnp,給出了一個UPnP棧實現。同時,Intel SDK for UPnP Device也比較成熟了,在Intel SDK for UPnP Device Programming Guide中甚至還給出了如何”Writing a UPnP Device”和”Writing a UPnP Control Point”的Demo程式。
看完了UPnP的架構,感覺UPnP跟WebServcie很像:都是採用SOAP協議到Web伺服器上去調用Service,但WebService的服務發布是靜態而相比之下UPnP則利用組播地址239.255.255.255:1900採用UDP多播的方式來實現自動擷取UPnP Device的Service列表(Control Point可以發M-Search請求去取,Device也可發Notify訊息主動通知各個Control Points).另外一個不同點就是UPnP下的Control Point(作為UPnP架構下的一個用戶端) 可以預先定製(Subscribe)UPnP裝置的相關訊息,在UPnP裝置的內部狀態發生改變時,其就會通知感興趣的那些Control Points(這有點像COM中的連接點了^_^).