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