3

我正在尝试订阅通过 FAST 协议通过多播分发的特定市场数据馈送。在 Java 中,有MulticastSocket并且有DatagramChannel支持多播。

我使用的 FAST 协议库 OpenFAST 接受MulticastSocket实例来创建端点,但似乎无法在其配置中指定源 IP 地址,它绑定到“任何源”,这不适用于此市场数据馈送。可以从 Java 1.7 开始)创建一个DatagramChannel定义了源 IP 的,如下所述:

NetworkInterface interf = NetworkInterface.getByName("eth0");
InetAddress group = InetAddress.getByName("225.0.0.100");
InetAddress source = InetAddress.getByName("172.20.40.1");

DatagramChannel dc = DatagramChannel.open(ProtocolFamily.INET)
    .setOption(SocketOption.SO_REUSEADDR, true)
    .bind(new InetSocketAddress(5000))
    .setOption(SocketOption.IP_MULTICAST_IF, interf);

MembershipKey key = dc.join(group, interf, source); // <- source specified

但是,我看不到MulticastSocket从频道获取的方法,该socket()方法只返回普通的 old DatagramSocket

有没有办法MulticastSocket直接或从启用源过滤创建一个DatagramChannel

4

1 回答 1

2

java.nio.MulticastChannel实现特定源组播,仅在 IGMPv3 中可用。java.net.MulticastSocket,另一方面,只支持 IGMPv2,所以你在这里不走运。

我建议您在防火墙级别过滤掉不需要的多播源,但您也可以尝试DatagramSocket.connect()在应用程序中建立源过滤。

希望这可以帮助。

于 2013-04-29T18:45:38.813 回答