我正在尝试订阅通过 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
?