【问题标题】:Permanent Listener to SSDP UDP BroadcastsSSDP UDP 广播的永久监听器
【发布时间】:2016-08-24 11:07:50
【问题描述】:

我已经实现了this thread 中给出的示例代码。它按承诺工作。不幸的是,它只会报告对 M-SEARCH 请求的直接响应,而不会报告其他内容。我正在寻找一种只收听 SSDP 广播的方法,以便捕获其他应用程序的搜索或通知广播。

我用 TIdUDPServer 尝试了各种配置,但都没有成功。我已经到了我认为不可能的地步。

我在同一网络上的另一台计算机上运行启用了网络发现的 Win 8.1 和 MediaServer。防火墙打开或关闭没有任何区别。使用 Window 的 UPnP API 可以正常工作,并且使用 UPnP 的应用程序正在正确检测 MediaServer 和其他 UPnP 设备。

Window 的内置 UPnP 服务是否在 239:255:255:250:1900 捕获这些广播并且不传递它们?我怎样才能只听那些广播?

【问题讨论】:

  • SSDP 不是广播,它是 UDP 多播。这意味着您的服务器需要在传递消息之前加入多播组(M-SEARCH 回复不是多播,因此它们可以工作)。因为我不知道 TldUDPServer,所以我没有写这个作为答案。
  • 我觉得你需要使用TIdIPMCastClient
  • 谢谢jiu。请参阅下面的答案。我想,我无法收听广播并使用相同的服务器类实例发送我自己的发现 ssdp,对吧?这必须分为两个实例,一个用于侦听器,一个用于发现请求及其答案,对吗?

标签: delphi indy upnp ssdp


【解决方案1】:

jku 为我指明了正确的方向。 TIdUDPServer 类提供了一个 AddMulticastMembership 方法,它可以解决问题。谢谢jku!

在有效的代码下方:

var
  server : TIdUDPServer;

...

with server do
  Active := false;
  BroadcastEnabled := true;
  DefaultPort := 1900;
  Binding.IP := GStack.LocalAddress;
  Binding.AddMulticastMembership('239.255.255.250');
  active := true;
end;

我一直在搞各种配置和测试,直到我注意到我的防火墙已将某些东西列入黑名单。仍然需要弄清楚它是什么,但关闭 FW 进行测试肯定会有所帮助。也重置我的路由器。除了localhost 的东西,我什么都没看到,在路由器重置后,网络上的所有 UPnP 设备都可以再次看到。有线。更多我需要了解的东西....

再次感谢和问候

卡斯滕

【讨论】:

  • 正如 Johan 在另一条评论中所说,您应该使用 TIdIPMCastClient 而不是 TIdUDPServer。 TIdIPMCastClient 是一个 UDP 多播客户端,并在内部为您调用 AddMulticastMembership()。只需将TIdIPMCastClient.MulticastGroup 属性设置为您要加入的多播组。
  • 我现在正在使用 IPMCast 客户端来收听广播,它适用于 Win32。不幸的是,它在 IOS 和 Android 下不会收到任何东西。我在另一个线程中读到 GStack.LocalAddresses 没有为 Android 实现,它在待办事项列表中。 IPMCast 客户端也是这种情况吗?
  • 从编码的角度来看,IPMCast 组件在所有平台上都实现了。但从物流的角度来看,Android(不确定 iOS)有 Indy 没有考虑的额外要求:stackoverflow.com/questions/3179710。具体来说,Android 的套接字堆栈需要调用 Android 的 WifiManager.createMulticastLock() 才能不丢弃多播数据包。您必须使用 Delphi 的 JNI Bridge 框架在您的代码中手动调用它。
  • @JerryDodge 由于另一个问题中描述的问题,我暂时将 iOS 放在一边。我很难让它按我想要的方式工作(即使在 Windows 上)。要么,要么我误解了它应该如何工作(XY事情)。如果你在做类似的事情,也许我们可以合作?
  • @DaveNottage 谢谢,我目前专注于我们应用程序的其他优先级更高的部分,我们目前已经将服务器发现基本上提升到了最低优先级。我们可能正在考虑一个不同的解决方案来代替这个,所以我将推迟这部分。
猜你喜欢
  • 2017-12-24
  • 1970-01-01
  • 1970-01-01
  • 2019-07-18
  • 1970-01-01
  • 2020-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多