我正在播放这样的发现消息:
M-SEARCH * HTTP/1.1\r\nHOST: 239.255.255.250:1900\r\nMAN: \"ssdp:discover\"\r\nMX: 10\r\nST: ssdp:all\r\n
我通常会收到DLNA设备的回复。但有时候我没有。
更大的问题是,如果我收到一次回复,并且我再次广播发现消息,那么我第二次或以后的设备都没有得到回复。
我阅读文档的方式是,设备需要响应这些广播消息。
我有两个问题:
设备响应发现消息的频率是否有限制?
有没有办法可以强迫/欺骗它再给我一个回复?
答案 0 :(得分:3)
我在M-SEARCH中看到的一些可能的问题(或者在任何情况下都不是100%合规):
关于不接收回复:当然可能有丢失消息的原因(错误),但请注意,您绝对不能信任消息传递,因为这是UDP而不是TCP。这就是为什么即使根据规范,每次M-SEARCH都应该多次发送。
如果我没记错的话,UPnP规范模糊地建议将“数百毫秒”作为发现消息的最小重复频率。
上述所有内容的来源是UPNP arch document,或者更确切地说是我的记忆。我几乎100%确定DLNA对这些东西有额外的要求,但我不记得那些不可思议的......这些可能的额外要求可能不应该让设备不响应你。
编辑:哦,哎呀,我打开了DLNA规范,为什么不呢:你应该发送超过1个M-SEARCH。每200 ms周期不应超过10 M-SEARCH。原始和重复应在10秒内发送。对于任何网络延迟,您应等待MX
秒以及一两秒钟的回复。