[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++ 구현에 대해 알아보았습니다. 멀티캐스트는 그룹 통신 및 데이터 스트리밍 등에 유용하게 활용될 수 있는 기술입니다.
자세한 내용은 아래 참고 자료를 참고해주시기 바랍니다.
참고 자료: