【发布时间】: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