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