[c++] 네트워크 프로그래밍과 DNS 조회

이번에는 C++를 사용하여 네트워크 프로그래밍 및 DNS(Domain Name System) 조회에 대해 알아보겠습니다.

네트워크 프로그래밍

네트워크 프로그래밍이란 데이터를 주고받을 수 있는 네트워크 연결을 통해 서로 다른 컴퓨터 간에 통신을 구현하는 것을 말합니다. C++에서는 socket 라이브러리를 사용하여 네트워크 프로그래밍을 구현할 수 있습니다.

이제 간단한 예제를 통해 C++로 소켓을 생성하고 통신을 해보겠습니다.

#include <iostream>
#include <cstring>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

#define PORT 8080

int main() {
    int server_fd, new_socket;
    struct sockaddr_in address;
    int opt = 1;
    int addrlen = sizeof(address);

    if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
        perror("socket failed");
        exit(EXIT_FAILURE);
    }
    
    address.sin_family = AF_INET;
    address.sin_addr.s_addr = INADDR_ANY;
    address.sin_port = htons(PORT);

    if (bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0) {
        perror("bind failed");
        exit(EXIT_FAILURE);
    }
    
    if (listen(server_fd, 3) < 0) {
        perror("listen");
        exit(EXIT_FAILURE);
    }
    
    if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen)) < 0) {
        perror("accept");
        exit(EXIT_FAILURE);
    }
    
    // 통신 코드 작성

    return 0;
}

위 코드는 C++로 간단한 소켓 서버를 생성하는 예제입니다.

DNS 조회

DNS(Domain Name System)는 도메인 이름을 IP 주소로 변환하거나, 그 반대의 역할을 수행하는 시스템입니다. C++에서는 DNS 조회를 위해 getaddrinfo 함수를 사용할 수 있습니다.

다음은 간단한 예제 코드입니다.

#include <iostream>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>

int main() {
    const char *hostname = "www.example.com";
    struct addrinfo hints;
    struct addrinfo *servinfo;

    memset(&hints, 0, sizeof(hints));
    hints.ai_family = AF_UNSPEC;
    hints.ai_socktype = SOCK_STREAM;

    int status = getaddrinfo(hostname, NULL, &hints, &servinfo);
    if (status != 0) {
        fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(status));
        return 1;
    }

    // servinfo 구조체를 이용한 IP 주소 출력

    freeaddrinfo(servinfo);
    return 0;
}

위 코드는 C++로 DNS 조회를 수행하는 예제입니다.

결론

이상으로 C++를 사용하여 네트워크 프로그래밍과 DNS 조회에 대해 알아보았습니다. 네트워크 프로그래밍 및 DNS 조회에 대한 자세한 내용은 관련 문서 및 참고 자료를 참고하시기 바랍니다.

관련 자료: