2011-09-16 3 views
0

메시지를 위해 멀티 캐스트 IP 230.10.10.10, 포트 11111을 수신하는 UDP 클라이언트를 실행 중입니다. UDP 브로드 캐스터와 동일한 서버에서 클라이언트 Java 코드를 실행하는 경우 UDP 메시지를받을 수 있습니다. 그러나 동일한 도메인의 다른 서버에서 실행하면 메시지가 표시되지 않습니다.자바 UDP 문제

Windows 서버 2008을 사용하고 있습니다. 디버깅 방법을 알려주십시오.

답변

1

도움 주셔서 감사합니다. 지금 해결했습니다. 상기 용액은 두 개의 IP 주소를 갖는 리스너

DatagramSocket datagramSocket = new MulticastSocket(multicastPort); 
((MulticastSocket) datagramSocket).setInterface(inetNicAddress); 

브로드 캐스터 멀티 홈에 setInterface의() 메소드를 호출이고 청취자는 단일 IP.So 있으며, I는 setInterface의 방법에서 IP 수신기를 설정할 때 괜찮 았어.

하지만 여전히 어떻게 작동하는지 잘 모르겠습니다. 왜냐하면 setInterface 메서드가 멀티 홈이고 괜찮아요. 방송사에서 호출되기 때문입니다. 그런데 왜 청취자에게 그것을 설정해야 하는가? . 조언이 도움이 될 것입니다.

+0

드디어 해결책을 얻었습니다. 나는 당신이 당신 자신의 대답 안에서이 질문 대신에 새로운 질문을 할 것을 제안한다. 그렇지 않으면 아무도 그것을 찾을 수 없습니다. – jeha

1

첫째, UDP는 보장 된 배달 프로토콜이 아닙니다. 둘째, 네트워크에서 UDP 패킷을 방화벽으로 필터링하거나 필터링 할 수 있습니다.

클라이언트 컴퓨터에서 11111 포트의 서버 컴퓨터에 연결할 수 있습니까?

+0

두 번째입니다. 라우터 중 하나가 UDP 패키지를 필터링합니다. "서버"의 로컬 방화벽 일 수도 있습니다. –

+0

서버이기 때문에 방화벽을 비활성화 할 수 없습니다. 그러나 방화벽 설정에서 포트 11111에 대한 예외가 추가되었습니다. 내가 알고 싶은 것은 방화벽 문제인지 라우터 필터 문제인지 어떻게 확인할 수 있습니까? 이것을 디버깅 할 수있는 툴이나 헬퍼 클래스가 있습니까? – Dunxton

0

문제는 멀티 캐스트 패킷의 TTL 일 수도 있습니다. 0 인 경우 패키지는 로컬에서만 수신 할 수 있습니다. Wireshark 같은 도구를 사용하여 네트워크 트래픽을 검사하는 것이 좋습니다. 그게 문제라면 TTL 값을 32로 늘리십시오. -Djava.net.preferIPv4Stack=true을 설정해야 할 수도 있습니다.

+0

발신자와 수신자 모두에서이 ipv4 속성을 설정합니까? TTL은 1로 설정되어 있습니다. – Dunxton

+0

반드시 양면에 설정하십시오. – jeha

+0

TTL 1은 패키지가 동일한 서브넷으로 제한되며 라우터가 전달하지 않음을 의미합니다. – jeha