안드로이드 멀티캐스트 예제

이 코드와 표준 UDP 코드의 주요 차이점은 MulticastSocket을 인스턴스화하고 joinGroup() 메서드를 사용하여 구독할 멀티캐스트 IP 주소를 지정한다는 것입니다. 데이터의 실제 수신은 일반 UDP 코드처럼 보입니다. 멀티 캐스팅은 이 문제를 해결하고 관심이 있는 소비자에게만 패킷을 보냅니다. 멀티캐스팅은 각 그룹을 나타내는 그룹 구성원 자격 개념을 기반으로 합니다. Java에서 MulticastSocket은 멀티캐스트 IP로 전송된 패킷을 수신하는 데 사용됩니다. 다음 예제에서는 MulticastSocket의 사용을 보여 줍니다: 보안 관리자가 있는 경우 이 메서드는 먼저 mcastaddr 인수를 인수로 checkMulticast 메서드를 호출합니다. 이 문서에서는 일대다(브로드캐스트) 및 일대다(멀티캐스트) 통신을 Java에서 처리하는 방법에 대해 설명합니다. 이 문서에서 설명하는 브로드캐스트 및 멀티캐스트 개념은 UDP 프로토콜을 기반으로 합니다. 소켓이 다중 캐스트 그룹/포트를 구독하면 그룹 및 포트의 다른 모든 구성원과 마찬가지로 다른 호스트가 그룹/포트로 보낸 데이터그램을 받습니다. 소켓은 leaveGroup(InetAddress addr) 방법으로 그룹의 멤버 자격을 포기합니다.

다중 멀티캐스트Socket은 멀티캐스트 그룹과 포트를 동시에 구독할 수 있으며 모두 그룹 데이터그램을 받게 됩니다. MulticastSocket을 포트에 바인딩한 후 multicast IP를 인수로 사용하여 joinGroup() 메서드를 호출합니다. 이 그룹에 게시된 패킷을 수신할 수 있어야 합니다. leaveGroup() 메서드를 사용하여 그룹을 탈퇴할 수 있습니다. 하드 코딩된 포트 번호는 4446입니다(클라이언트는 이 포트에 바인딩된 MulticastSocket이 있어야 합니다). DatagramPacket의 하드 코딩된 InetAddress는 “203.0.113.0”이며 단일 클라이언트가 실행 중인 컴퓨터의 인터넷 주소가 아닌 그룹 식별자입니다. 이 특정 주소는 이 목적을 위해 예약된 주소에서 임의로 선택되었습니다. 안드로이드에서 멀티 캐스트를 사용하는 몇 가지 주의 사항이 있습니다. AndroidManfest.xml에 권한을 추가해야 합니다. 보안 관리자가 있는 경우 이 메서드는 먼저 몇 가지 보안 검사를 수행합니다.

첫째, p.getAddress().isMulticastAddress()가 true인 경우 이 메서드는 보안 관리자의 checkMulticast 메서드를 p.getAddress() 및 ttl을 인수로 호출합니다. 해당 식의 평가가 false이면 이 메서드는 보안 관리자의 checkConnect 메서드를 인수 p.getAddress()와 p.getPort()를 호출합니다. 보안 관리자 메서드에 대한 각 호출은 작업이 허용되지 않는 경우 SecurityException이 발생할 수 있습니다. 하지만 또 다른 방법이 있습니다: 멀티캐스트 UDP. 기본적으로 파티클은 UDP에 의해 한 번 데이터를 전송하며 관심있는 만큼 많은 클라이언트가 자동으로 수신합니다. 홈 라우터가 모든 작업을 처리하므로 파티클이 과부하되지 않습니다. 멀티캐스트는 인터넷을 통해 사용할 수도 있지만, 더 복잡하고 보안이 문제이므로 여기서는 다루지 않습니다.