对于一个应用程序,我将发现所有运行的“我的”设备及其版本,以推送它们(通过其他协议)。
但我无法弄清楚如何向发现对象指定它必须搜索的URI,而不必指定对象。
注意:我知道我也可以使用空URI字符串发现然后在我收到的设备上进行过滤,但是因为我有一个巨大的(600+)以上的UPnP设备网络,但我需要搜索的少量UPnP设备(~20),需要花费很多时间,而且我正在寻找一种有效的方法。
所以,如果我的URN如下:urn:upnp-org:device:TestDevice:2.2.5
,我想拥有
urn:upnp-org:device:TestDevice:*
,我该怎么办?
我试过
urn:upnp-org:device:TestDevice:
urn:upnp-org:device:TestDevice:*
有没有通配符?占位符?
答案 0 :(得分:2)
我认为您滥用M-SEARCH
的版本控制功能。 ST
版本表示界面版本,而非实施版本,预计更高版本完全向后可合并。因此, 能够搜索设备的任何版本,只需使用已知最低版本填充ST:
即可。 所有设备都会回复您,但使用的是您搜索的版本,而不是实际版本(因为它们向后兼容)。没有什么比“通配符”更好,因为设备应该尽力满足M-SEARCH
要求,而不是吹嘘他们的实际版本。
我建议仔细阅读UPnP设备架构文档,第1.2.2和1.2.3章,围绕M-SEARCH请求和响应。
如果您想将UPnP用于实施版本发现(这是完全合法的),我建议使用返回该信息的函数来实现自定义服务。你已经有了自定义设备,据我所知。