2012-02-13 47 views
2

我的网络中有一个基于组播的IPTV。 所有通道都有类似239.0.1。*的多点传送地址。 流光设备发送UDP数据到目标端口1234 所以接收电视流我不平常的东西,如:Erlang:在同一个端口上接收多个组播流

{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。

谢谢!

+0

如果你在这里没有得到答案,你可以考虑在erlang问题上提出这个问题。 – 2012-02-13 13:09:31

+0

阅读此:http://stackoverflow.com/questions/1746257/how-to-send-multicast-messages-and-reuse-a-port-in-erlang – Ricardo 2012-02-27 19:46:06

+0

里卡多,起初我想你发布链接到点我回答。但现在我想你想让我给你一个建议。不幸的是,我不能帮你。 – 3DFace 2012-03-16 22:54:20

回答

0

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

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

地址将包含元组如{} 239,0,1,3。

+0

不幸的是它没有。地址包含我的真实IP地址(194.x.x.88),而不是多播组地址。 – 3DFace 2012-05-30 10:19:01

相关问题