[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 조회에 대한 자세한 내용은 관련 문서 및 참고 자료를 참고하시기 바랍니다.
관련 자료: