[c++] 멀티캐스트 통신 구현

멀티캐스트 그룹 설정

멀티캐스트 그룹에 참여하려면 소켓을 멀티캐스트 모드로 설정해야 합니다. 아래는 소켓을 멀티캐스트 모드로 설정하는 코드 예시입니다.

#include <iostream>
#include <arpa/inet.h>

int main() {
    int sockfd;
    struct sockaddr_in addr;
    
    sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    if (sockfd < 0) {
        std::cerr << "Error opening socket" << std::endl;
        return -1;
    }

    memset(&addr, 0, sizeof(addr));
    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = inet_addr("멀티캐스트 그룹 주소");
    addr.sin_port = htons(멀티캐스트 포트 번호);

    if (bind(sockfd, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
        std::cerr << "Error binding socket" << std::endl;
        return -1;
    }

    // 멀티캐스트 그룹 참여
    struct ip_mreq mreq;
    mreq.imr_multiaddr.s_addr = inet_addr("멀티캐스트 그룹 주소");
    mreq.imr_interface.s_addr = INADDR_ANY;
    if (setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&mreq, sizeof(mreq)) < 0) {
        std::cerr << "Error setting socket options" << std::endl;
        return -1;
    }

    // 멀티캐스트 수신 처리
    // ...

    return 0;
}

위의 코드에서 멀티캐스트 그룹 주소멀티캐스트 포트 번호는 각각 멀티캐스트 그룹의 주소와 포트 번호로 대체되어야 합니다.

멀티캐스트 데이터 송수신

멀티캐스트 그룹에 가입한 후 데이터를 송수신하려면 단일 소켓을 사용하여 데이터를 송수신할 수 있습니다. 데이터를 보내는 측과 받는 측은 동일한 멀티캐스트 주소와 포트 번호를 사용해야 합니다.

// 멀티캐스트 데이터 송신
char message[] = "Hello, Multicast!";
sendto(sockfd, message, strlen(message), 0, (struct sockaddr *)&addr, sizeof(addr));

// 멀티캐스트 데이터 수신
char buffer[1024];
socklen_t addrlen = sizeof(addr);
recvfrom(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr *)&addr, &addrlen);
std::cout << "Received: " << buffer << std::endl;

위의 코드에서 sockfd는 소켓 파일 디스크립터를, addr은 멀티캐스트 그룹의 주소와 포트를 가진 sockaddr_in 구조체를 나타냅니다.

멀티캐스트 통신을 위한 C++ 구현에 대해 알아보았습니다. 멀티캐스트는 그룹 통신 및 데이터 스트리밍 등에 유용하게 활용될 수 있는 기술입니다.

자세한 내용은 아래 참고 자료를 참고해주시기 바랍니다.

참고 자료: