2013-04-29 2 views
3

FAST 프로토콜을 통해 멀티 캐스트로 배포되는 특정 시장 데이터 피드를 구독하려고합니다. Java의 경우 MulticastSocket이고 멀티 캐스트를 지원하는 DatagramChannel이 있습니다.데이터 그램 소스가 정의 된 Java MulticastSocket

내가 사용하는 FAST 프로토콜 라이브러리 인 OpenFAST는 MulticastSocket 인스턴스를 사용하여 끝점을 만들지 만 구성에 원본 IP 주소를 지정하는 것은 불가능한 것처럼 보이며 "모든 원본"에 바인딩됩니다. 시장 데이터 피드. 그것은 가능이다 (자바 1.7 이후) 여기에 설명과 같이 정의 된 소스 IP와 DatagramChannel 만들려면 다음의 socket() 메소드가 리턴을

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을 얻을 수있는 방법이 표시되지 않습니다를 그냥 일반 올드 DatagramSocket.

소스 필터링이 활성화 된 MulticastSocket을 직접 만들거나 DatagramChannel에서 만들 수있는 방법이 있습니까?

답변

2

java.nio.MulticastChannel은 IGMPv3에서만 사용할 수있는 출처 별 멀티 캐스트를 구현합니다. 반면에 java.net.MulticastSocket은 IGMPv2 만 지원하므로 운이 좋지 않습니다.

불필요한 멀티 캐스트 소스를 방화벽 수준에서 필터링하는 것이 좋습니다.하지만 DatagramSocket.connect()을 사용하여 앱에서 소스 필터링을 설정할 수도 있습니다.

희망이 도움이됩니다.

관련 문제