2012-05-26 4 views
0

Java 소켓 사용 환경이 제한되어 있고 TCP를 사용하는 모든 환경이 있습니다. UDP를 배우려고합니다. UDP 멀티 캐스팅을 사용하는 다중 프로세스 응용 프로그램을 실행 중입니다. 몇 가지 간단한 연구 (그리고 주제에 대한 나의 초기 이해) 후, 나는 멀티 캐스팅이 적절한 접근 방법이라고 생각했다.UDP 멀티 캐스트 올바른 선택?

은유 적으로 나는 모든 프로세스가 같은 "방"을 공유하기를 원하며 서로 "소리 치십시오". 그래서 프로세스 1이 "안녕하세요"라는 메시지를 보내면 모든 프로세스 2.n이 그 패킷을 받도록하고 그 반대도 마찬가지입니다.

처음에는 모두 작동하는 것처럼 보였지만 버그가 있음을 깨달았습니다. 나는 첫 번째 프로세스를 시작하고 두 번째 프로세스를 시작할 때 첫 번째 프로세스는 두 번째 메시지를 수신하지만 그 반대는 수행하지 않습니다. 내가 MulticastSocket receive() 프로세스 1에서 할 때 궁금

, effecitvely 가지고 있다는 것입니다 후 그것이 recieve()입니다 않을 때 볼 수 없습니다 2를 처리 스택 오프 DatagramPacket인가?

답변

2

문제는 프로토콜 선택에 있지 않습니다. TCP/IP가 도움이되지 않으며 UDP 브로드 캐스트도 도움이되지 않습니다.

문제는 운영 체제의 네트워크 스택이 현재 네트워크 트래픽을 수신 할 때 네트워크 트래픽을 버퍼링하지 않는다는 것입니다. 그리고 그것은 두 번째 프로세스와 관련하여 일어나는 일입니다.

요약하면 스키마가 작동하지 않습니다.


하나의 대안 메시지 "가"는 "새로운"공정 멀티 캐스트를하는 것입니다, 그리고 다른 모든 멀티 캐스트 또는 직접 패킷으로 응답했다. 그러나, 당신은 바퀴를 여기에 reinventing 있습니다. 이 문제는 다양한 "미들웨어"스택을 사용하여 여러 번 해결되었습니다.

+0

신속하고 완전한 답장을 보내 주셔서 감사합니다. 나는 누가 거기있는 계획을 구현할 것 같아. : / – Ternary

관련 문제