gpt4 book ai didi

定义了数据报源的 Java MulticastSocket

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:29:31 26 4
gpt4 key购买 nike

我正在尝试订阅一个特定的市场数据提要,通过 FAST 协议(protocol)以多播方式分发。在Java中,有MulticastSocket,也有DatagramChannel支持多​​播。

我使用的 FAST 协议(protocol)库 OpenFAST 接受 MulticastSocket 实例来创建端点,但似乎无法在其配置中指定源 IP 地址,它绑定(bind)到“任何源”,这不适用于此市场数据提要。 可以(自 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

但是,我没有看到从 channel 获取 MulticastSocket 的方法,socket() 方法只返回普通的旧 DatagramSocket.

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

最佳答案

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

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

希望这对您有所帮助。

关于定义了数据报源的 Java MulticastSocket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16276361/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com