[c++] TCP 프로토콜을 사용한 네트워크 프로그래밍

TCP(Transmission Control Protocol)는 신뢰성이 있는 연결 지향형 프로토콜로, 네트워크 프로그래밍에서 자주 사용됩니다. 이번에는 C++을 사용하여 TCP 프로토콜을 활용한 네트워크 프로그래밍에 대해 알아보겠습니다.

TCP 소켓 프로그래밍

TCP 소켓 프로그래밍은 기본적으로 클라이언트와 서버 간의 통신을 담당합니다. 클라이언트가 서버로 메시지를 보내고, 서버가 그에 대한 응답을 보내는 과정을 구현합니다.

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

int main()
{
    // 소켓 생성
    int serverSocket = socket(AF_INET, SOCK_STREAM, 0);
    
    // 서버 정보 설정
    struct sockaddr_in serverAddr;
    serverAddr.sin_family = AF_INET;
    serverAddr.sin_port = htons(54000);
    inet_pton(AF_INET, "127.0.0.1", &serverAddr.sin_addr);

    // 서버에 연결
    connect(serverSocket, (struct sockaddr*)&serverAddr, sizeof(serverAddr));

    // 데이터 송수신
    char msg[4096];
    recv(serverSocket, msg, sizeof(msg), 0);
    std::cout << "서버로부터 받은 메시지: " << msg << std::endl;
    
    // 소켓 닫기
    close(serverSocket);

    return 0;
}

위의 코드는 TCP 클라이언트를 구현한 예제입니다. 이 코드는 서버에 연결한 후에 서버로부터 메시지를 받아 화면에 출력하는 동작을 합니다.

TCP 서버 프로그래밍

이어서 TCP 서버 프로그래밍을 살펴봅시다.

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

int main()
{
    // 소켓 생성
    int serverSocket = socket(AF_INET, SOCK_STREAM, 0);

    // 서버 정보 설정
    struct sockaddr_in serverAddr;
    serverAddr.sin_family = AF_INET;
    serverAddr.sin_addr.s_addr = INADDR_ANY;
    serverAddr.sin_port = htons(54000);

    // 바인딩
    bind(serverSocket, (struct sockaddr*)&serverAddr, sizeof(serverAddr));

    // 수신 대기
    listen(serverSocket, SOMAXCONN);

    // 클라이언트 연결 수락
    int clientSocket = accept(serverSocket, nullptr, nullptr);

    // 데이터 송수신
    char msg[] = "안녕하세요 from server!";
    send(clientSocket, msg, sizeof(msg), 0);

    // 소켓 닫기
    close(clientSocket);

    return 0;
}

위 코드는 TCP 서버를 구현한 예제입니다. 서버는 클라이언트의 연결을 수락한 후에 “안녕하세요 from server!”라는 메시지를 클라이언트에게 전송합니다.

TCP를 사용한 네트워크 프로그래밍을 위한 C++ 코드를 살펴보았습니다. TCP는 신뢰성 있는 연결을 제공하여 안정적인 네트워크 통신을 구현하는 데 유용합니다.

참고 자료