我正在尝试订阅通过FAST协议以组播方式分发的特定市场数据源。在Java中,有
我使用的 FAST 协议库 OpenFAST 接受
MulticastSocket
和 DatagramChannel
支持组播。我使用的 FAST 协议库 OpenFAST 接受
MulticastSocket
实例来创建端点,但似乎无法在其配置中指定源 IP 地址,它绑定到“任何源”,这与此市场数据源不兼容。自Java 1.7以来,可以创建具有定义源IP的 DatagramChannel
,如此处所述: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()
方法只返回普通的 DatagramSocket
。
是否有一种方式可以直接或从DatagramChannel
创建启用源过滤的 MulticastSocket
?