我正嘗試訂閱特定的市場數據饋送,通過FAST協議通過多播分發。在Java中,有MulticastSocket
,支持多播的是DatagramChannel
。定義了數據報源的Java MulticastSocket
我使用的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
。
有沒有辦法創建MulticastSocket
啓用源過濾,直接或從DatagramChannel
?