我正在使用Cling Java库来实现UPnP控制点。
本机controlpoint.search()函数是非阻塞的,并通过回调机制报告设备。
有没有办法对搜索进行阻止调用,这会在找到设备时返回? 或者我可以等到设备被找到的状态标志?
(我自己实现这个很简单,但我想尽可能多地使用本机API)
答案 0 :(得分:3)
即使API允许它(它没有),这也是非常不明智的事情。 UPnP中的设备发现(也称为搜索)本质上是异步的。搜索以广播开始,您作为控制点无法知道设备何时响应,将会有多少,以及是否有任何响应。在UPnP发现中没有这样的事件,因为“现在我找到了所有设备,而且不会再有了” - 这正是您需要的,以便进行可靠的阻塞等待。最好的折衷方案可能是超时阻塞等待 - 但是你要设置什么超时?太短意味着某些设备可能无法及时响应(您私下决定的时间),太长意味着即使没有更多设备可以响应您仍然在等待 - 但由于UPnP ad-hoc网络的设计,您根本无法知道那里有多少设备。
您可能需要解释为什么阻止搜索对您来说非常重要。