[c++] 네트워크 프로그래밍에서의 데이터 전송과 수신

네트워크 프로그래밍은 데이터를 안정적으로 전송하고 수신하는 것이 중요합니다. 여기에서는 C++을 사용하여 네트워크를 통해 데이터를 전송하고 수신하는 방법에 대해 알아봅니다.

데이터 전송

네트워크를 통해 데이터를 전송하는 방법은 여러 가지가 있지만, 가장 흔한 방법은 소켓(socket)을 이용하는 것입니다. 소켓을 이용하여 데이터를 보내기 위해서는 다음과 같은 단계가 필요합니다.

  1. 소켓 생성: 데이터를 보내기 위한 소켓을 생성합니다.
  2. 연결 설정: 데이터를 보낼 대상 서버에 연결을 설정합니다.
  3. 데이터 송신: 소켓을 통해 데이터를 전송합니다.

다음은 C++을 사용하여 데이터를 송신하는 간단한 예제 코드입니다.

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

int main() {
    int clientSocket = socket(AF_INET, SOCK_STREAM, 0);
    if (clientSocket < 0) {
        std::cerr << "Error creating socket" << std::endl;
        return 1;
    }

    struct sockaddr_in serverAddress;
    serverAddress.sin_family = AF_INET;
    serverAddress.sin_port = htons(8080);
    serverAddress.sin_addr.s_addr = inet_addr("192.168.1.2");

    if (connect(clientSocket, (struct sockaddr*)&serverAddress, sizeof(serverAddress)) < 0) {
        std::cerr << "Error connecting to server" << std::endl;
        return 1;
    }

    const char* message = "Hello, server!";
    send(clientSocket, message, strlen(message), 0);

    close(clientSocket);

    return 0;
}

데이터 수신

데이터를 수신하는 과정은 데이터를 송신하는 과정의 역순으로 이루어집니다. 다음은 C++을 사용하여 데이터를 수신하는 간단한 예제 코드입니다.

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

int main() {
    int serverSocket = socket(AF_INET, SOCK_STREAM, 0);
    if (serverSocket < 0) {
        std::cerr << "Error creating socket" << std::endl;
        return 1;
    }

    struct sockaddr_in serverAddress;
    serverAddress.sin_family = AF_INET;
    serverAddress.sin_port = htons(8080);
    serverAddress.sin_addr.s_addr = INADDR_ANY;

    if (bind(serverSocket, (struct sockaddr*)&serverAddress, sizeof(serverAddress)) < 0) {
        std::cerr << "Error binding socket" << std::endl;
        return 1;
    }

    listen(serverSocket, 1);

    struct sockaddr_in clientAddress;
    socklen_t clientAddressLength = sizeof(clientAddress);
    int clientSocket = accept(serverSocket, (struct sockaddr*)&clientAddress, &clientAddressLength);

    char buffer[1024] = {0};
    int valread = read(clientSocket, buffer, 1024);
    std::cout << "Received: " << buffer << std::endl;

    close(serverSocket);
    close(clientSocket);

    return 0;
}

이 예제 코드에서는 read 함수를 사용하여 데이터를 수신하고, 받은 데이터를 콘솔에 출력하고 있습니다.

네트워크 프로그래밍에서 데이터를 안정적으로 전송하고 수신하려면 소켓을 올바르게 생성하고 연결하고 데이터를 전송하고 수신하는 등의 모든 단계를 신중하게 처리해야 합니다.

참고 자료

  1. Beej’s Guide to Network Programming - http://beej.us/guide/bgnet/