gpt4 book ai didi

sockets - Erlang:在同一个端口上接收多个组播流

转载 作者:行者123 更新时间:2023-12-01 00:40:28 25 4
gpt4 key购买 nike

我的网络中有一个基于多播的 IPTV。
所有 channel 都有多播地址,如 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}}}]),

有用。

现在我想订阅多个 channel 以同时接收多个流。
所以我再打一个电话:
inet:setopts(S, [{add_membership, {{239,0,1,3}, {0,0,0,0}}}]),

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

但。

在 Erlang 中,我无法确定传入数据包所属的 channel ,导致 UDP 数据作为消息到达:
{udp, Socket, IP, PortNo, Packet},

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

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

Windows 7,Erlang 5.9/OTP R15B。

谢谢!

最佳答案

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

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

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

关于sockets - Erlang:在同一个端口上接收多个组播流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9253958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com