c++ 멀티 캐스트 예제

optname은 우리가 설정/가져오는 옵션을 식별합니다. 해당 값(프로그램에서 제공하거나 커널에서 반환)은 optval입니다. 멀티캐스트 프로그래밍과 관련된 옵트네임은 다음과 같습니다: 응용 프로그램 프로그램은 소켓() API 및 연결없는 SOCK_DGRAM 유형 소켓을 사용하여 멀티캐스트 데이터그램을 보내거나 받을 수 있습니다. 호스트에 두 개 이상의 멀티캐스팅 가능 인터페이스가 있더라도 각 멀티캐스트 전송은 단일 네트워크 인터페이스에서 전송됩니다. /* 로컬 203.106.93.94 */ 관심 있는 멀티캐스트 그룹을 커널에 알려야 한다는 점을 기억하십시오. 그룹에 관심이 없는 프로세스가 없는 경우 호스트에 도착하는 패킷은 삭제됩니다. 관심 커널에 알리고 해당 그룹의 구성원이 되려면 먼저 setockopt() 시스템 호출의 optval 필드에 있는 커널에 나중에 전달되는 ip_mreq 구조를 작성해야 합니다. 일반적으로 시스템 관리자는 기본 인터페이스 멀티캐스트 데이터그램을 전송해야 한다고 지정합니다. 프로그래머는 이를 재정의하고 이 옵션을 사용하여 지정된 소켓에 대한 구체적인 나가는 인터페이스를 선택할 수 있습니다. /* 아웃바운드 멀티캐스트 데이터그램에 대한 로컬 인터페이스를 설정합니다. */ /* */ 예제: 멀티캐스트 데이터그램 IP_ADD_MEMBERSHIP: 지정된 멀티캐스트 그룹에 가입하여 전송 및 수신하는 멀티캐스트 그룹에 메시지를 보냅니다. 전송 시스템이 전송되는 멀티캐스트 데이터그램의 복사본을 받아야 하는지 여부에 따라 IP_MULTICAST_LOOP 소켓 옵션을 설정합니다.

달리 지정하지 않으면 멀티캐스트 데이터그램이 기본값이 1로 전송되어 로컬 네트워크 이상으로 전달되지 않습니다. TTL을 원하는 값(0에서 255까지)으로 변경하려면 해당 값을 변수에 넣고(여기서는 ”ttl”이라고 지정함) 프로그램의 어딘가에 작성합니다. 두 번째 수준인 수준은 호출하려는 옵션, 메시지 또는 쿼리를 처리할 레이어를 식별합니다. 그래서, SOL_SOCKET은 소켓 레이어, IP층, IP층 등… 멀티캐스트 프로그래밍의 경우 레벨은 항상 IPPROTO_IP입니다. SOCK_DGRAM 형식의 소켓이 만들어지면 응용 프로그램은 setockopt() 함수를 사용하여 해당 소켓과 연결된 멀티캐스트 특성을 제어할 수 있습니다. setockopt() 함수는 다음과 같은 IPPROTO_IP 수준 플래그를 허용합니다. 첫 번째 매개 변수인 s는 시스템 호출이 적용되는 소켓입니다. 멀티 캐스팅의 경우 패밀리 AF_INET의 소켓이어야 하며 그 유형은 SOCK_DGRAM 또는 SOCK_RAW일 수 있습니다. 가장 일반적인 용도는 SOCK_DGRAM 소켓이지만 라우팅 데몬을 작성하거나 기존 소켓을 수정하려는 경우 SOCK_RAW 소켓을 사용해야 합니다. 이제부터이 소켓에서 생성 된 모든 멀티 캐스트 트래픽은 선택한 인터페이스에서 출력됩니다. 원래 동작으로 되돌리고 커널이 시스템 관리자의 구성에 따라 나가는 인터페이스를 선택하도록 하려면 인터페이스 필드에서 이 옵션과 INADDR_ANY를 사용하여 setockopt()를 호출하는 것으로 충분합니다.