【问题标题】:Erlang: receive multiple multicast streams on the same portErlang:在同一个端口上接收多个多播流
【发布时间】:2012-03-04 11:13:14
【问题描述】:

我的网络中有一个基于多播的 IPTV。 所有频道都有多播地址,例如 239.0.1.*。 Streamer 设备将 UDP 数据发送到目标端口 1234。 因此,为了接收电视流,我会做一些常见的事情,例如:

{ok, S} = gen_udp:open(1234, ....
inet:setopts(S, [{add_membership, {{239,0,1,2}, {0,0,0,0}}}]),

有效。

现在我想订阅多个频道以同时接收多个流。 所以我又打了一个电话:

inet:setopts(S, [{add_membership, {{239,0,1,3}, {0,0,0,0}}}]),

它也有效。我在 Wireshark 中看到了两个流。我可以通过目标 IP 地址来区分它们 - 239.0.1.2 和 239.0.1.3。

但是。

在 Erlang 中我无法确定传入数据包所属的通道,因为 UDP 数据作为消息到达:

{udp, Socket, IP, PortNo, Packet},

其中 IP 和 PortNo 是源地址(在我的例子中是 10.33.33.32)和端口(49152)。

所以问题是 - 如何确定传入多播 UPD 数据包的目标 IP 地址。

Windows 7、Erlang 5.9/OTP R15B。

谢谢!

【问题讨论】:

  • 如果你在这里没有得到答案,你可以考虑在 erlang-questions 上问这个。
  • 里卡多,起初我以为你发布了一个链接来指向我的答案。但现在我猜你想让我给你一个建议。很遗憾,我帮不了你。

标签: sockets erlang udp multicast


【解决方案1】:

这应该从接收到的 UDP 数据中检索目标 IP:

{udp, Socket, IP, PortNo, Packet},
{ok, {Address, Port}} = inet:sockname(Socket),

地址将包含像 {239,0,1,3} 这样的元组。

【讨论】:

  • 不幸的是它没有。地址包含我的真实IP地址(194.x.x.88),而不是多播组地址。
猜你喜欢
  • 2011-02-14
  • 2015-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多