1.1 UPnP Introduction
“通用即插即用”(UPnP)是 Microsoft Windows 中一种支持网络设备点对点“即插即用”功能的体系结构。UPnP 规范的设计目的是简化设备和网络服务的安装与管理。UPnP通过一种无驱动程序的、基于标准的协议机制来完成设备和服务的查找与控制。“通用即插即用”设备可自动配置网络寻址,宣布它们在一个网络子网上的存在,并允许说明设备与服务说明的交换。一台 Windows Me或以上计算机可作为一个 UPnP 控制点,通过 Web 或应用程序接口来发现和控制设备。
1.2 UPnP Terminology
“通用即插即用”(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)。
- 事件 - 如果一个控制点预订了一项服务,则该服务将向此控制点发送事件消息,以宣布设备状态的改变。事件消息采用 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中的连接点了^_^).