2012-02-13 183 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