2012-01-04 2 views
1

멀티 캐스트 IP를 독점적으로 만들려고합니다. 즉, "잠김"상태 일 수 있으며 잠긴 상태 일 때 더 이상 멀티 캐스트 소켓에 참여할 수 없습니다.Java : 멀티 캐스트 IP InetAddress를 독점으로 만드는 방법은 무엇입니까?

가능합니까? 어떻게해야합니까?

String multicastIP = "224.0.0.1"; //multicast IP to "lock" later 
InetAddress group = InetAddress.getByName(multicastIP); //create group 

MulticastSocket multicastSocket = new MulticastSocket(8800); //Create a MulticastSocket using port 8800 
multicastSocket.joinGroup(group); //join the group 

//This is the part where I want to "lock" the group/IP 

추가 정보 :

내가 계획을 방송 여러 클라이언트에 하나의 서버가이 방법을 통해 이루어집니다 네트워크 게임을 개발하고 있어요 여기에 내 경우를 설명하는 몇 가지 코드입니다.

우연히 두 개의 서버 (동일한 멀티 캐스트 IP를 가짐)가 생성되었으며 클라이언트는 두 서버를 모두 수신하여 두 서버의 메시지를 수신합니다.

우리가 원하는 것은 클라이언트가 각각의 서버에만 수신 대기하도록하는 것입니다.

감사합니다. : D

+1

라우터 구성을 통한 멀티 캐스트 액세스는 제한 할 수 있지만 java의 액세스는 제한 할 수 있으며 라우터 유출은 전달 여부 패킷. 패킷 데이터 필드를 사용하여 누가 응답하는지 제한해야합니다. – MeBigFatGuy

+0

오, 고마워. 그러나 우리는 그것을 프로그램을 통해 완료해야합니다. 그래서 자바로 할 수 없다는 말입니까? – brain56

+0

서버에없는 패킷은 무시하십시오. 당신이 그들을받는 즉시 그들을 버려. UDP 응용 프로그램은 항상 이전 세션 또는 임의의 가비지에서 "stray"패킷을 처리해야합니다. 코드를 작성하여 삭제하십시오. –

답변

2

멀티 캐스트는이 작업을 수행하지 않습니다.

들어오는 각 패킷 when you receive it을 검사하고 클라이언트가 보내는 (source address, source port) 튜플과 일치시켜야합니다.

솔직히 나는 이것을 위해 muticast를 사용하는 것이 많은 이점이 있다고 생각하지 않습니다. 필자가 보았던 한 가지 방법은 서비스 검색을 위해 멀티 캐스트를 사용한 다음이를 발견 한 후에 "실제"프로토콜에 대해 유니 캐스트를 사용하는 것입니다.

편집 : LAN 응용 프로그램의 경우 멀티 캐스트가 허용 될 수 있습니다. 너무 많이 방송하지 않도록 조심할 것입니다. (멀티 캐스트는 본질적으로 대부분의 스위치에 브로드 캐스트되며 네트워크가 아닌 NIC에 의해 필터링됩니다.) 즉, 클라이언트가 서버에 대한 유니 캐스트 업데이트를하는 동안 서버가 멀티 캐스트 트래픽을 보내는 서버인지 확인하는 것이 이상적입니다. (모든 클라이언트가 다른 모든 클라이언트가 볼 수있는 상태 업데이트를 멀티 캐스트하는 경우 서버를 갖게되는 목적은 무엇입니까?)

+0

유니 캐스트를 사용하지 않으면 많은 클라이언트와 서버가 관련된 네트워크 게임을 프로그래밍하는 속도가 느립니 까? – brain56

+0

@ brain56, +1 네트워크의 최대 대역폭에 가까울 때만. 대부분의 서버는 1Gb 네트워크 연결을 원합니다. TCP는 안정적으로 프로그램하기가 훨씬 쉽습니다. 먼저 이것을 구현하고 필요에 따라 변경하는 것이 좋습니다. –

+0

@ brain56, 나도 몰라. 게임의 규모와 유스 케이스에 따라 다릅니다. 로컬 영역 네트워크에서만 재생할 것으로 기대합니까? 아니면 인터넷 게임용입니까? 누군가 두 번째 서버를 시작하면 어떻게됩니까? (심지어 일어날 수 있습니까, 아니면 오직 하나의 서버가 있습니까?) – mpontillo