[c++] 네트워크 소켓 프로그래밍

이번에는 C++을 사용하여 네트워크 소켓 프로그래밍을 하는 방법에 대해 알아보겠습니다.

소켓 프로그래밍이란?

소켓 프로그래밍은 네트워크 통신을 위한 응용프로그램을 개발하는 기술을 말합니다. 소켓은 서버와 클라이언트 사이의 양방향 통신을 가능하게 하는 통로 역할을 합니다.

네트워크 소켓 프로그래밍 예제

아래는 간단한 C++ 서버와 클라이언트의 예제 코드입니다.

서버

#include <iostream>
#include <WS2tcpip.h>
#include <winsock2.h>

#pragma comment(lib, "ws2_32.lib")

int main() {
    // Winsock 초기화
    WSADATA wsData;
    WORD ver = MAKEWORD(2, 2);
    int wsOK = WSAStartup(ver, &wsData);
    if (wsOK != 0) {
        std::cerr << "Can't initialize winsock! Quitting" << std::endl;
        return -1;
    }

    // 소켓 생성
    SOCKET listening = socket(AF_INET, SOCK_STREAM, 0);
    if (listening == INVALID_SOCKET) {
        std::cerr << "Can't create a socket! Quitting" << std::endl;
        return -1;
    }

    // 바인딩
    sockaddr_in hint;
    hint.sin_family = AF_INET;
    hint.sin_port = htons(54000);
    hint.sin_addr.S_un.S_addr = INADDR_ANY;
    bind(listening, (sockaddr*)&hint, sizeof(hint));

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

    // 클라이언트 연결 대기
    sockaddr_in client;
    int clientSize = sizeof(client);
    SOCKET clientSocket = accept(listening, (sockaddr*)&client, &clientSize);

    // 소켓 종료
    closesocket(listening);
    WSACleanup();

    return 0;
}

클라이언트

#include <iostream>
#include <WS2tcpip.h>
#include <winsock2.h>

#pragma comment(lib, "ws2_32.lib")

int main() {
    // Winsock 초기화
    WSADATA wsData;
    WORD ver = MAKEWORD(2, 2);
    int wsOK = WSAStartup(ver, &wsData);
    if (wsOK != 0) {
        std::cerr << "Can't initialize winsock! Quitting" << std::endl;
        return -1;
    }

    // 소켓 생성
    SOCKET out = socket(AF_INET, SOCK_STREAM, 0);
    if (out == INVALID_SOCKET) {
        std::cerr << "Can't create a socket! Quitting" << std::endl;
        return -1;
    }

    // 서버 연결
    sockaddr_in hint;
    hint.sin_family = AF_INET;
    hint.sin_port = htons(54000);
    hint.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
    connect(out, (sockaddr*)&hint, sizeof(hint));

    // 소켓 종료
    closesocket(out);
    WSACleanup();

    return 0;
}

이제 간단한 C++ 소켓 프로그래밍을 위한 기본적인 예제 코드를 확인할 수 있습니다. 필요에 따라 상세한 사용 방법에 대해 추가적으로 알아보시고, 원하는 기능을 추가해보세요.