[c++] C++에서의 비동기 네트워크 입출력

C++에서 비동기 네트워크 입출력을 위해 유용한 라이브러리는 Boost.Asio입니다. Boost.Asio는 네트워크 및 입출력 작업에 대한 효율적인 비동기 처리를 제공합니다.

Boost.Asio를 사용하여 비동기 네트워크 입출력을 수행하는 방법은 다음과 같습니다.

  1. io_context를 생성하여 비동기 작업을 관리합니다.
  2. 네트워크 소켓을 생성하고 연결합니다. 이때 asio::ip::tcp::socket을 사용하여 TCP 소켓을 만들고 연결할 수 있습니다.
  3. 비동기로 데이터를 읽거나 쓰기 위해 async_read, async_write 함수를 사용합니다.

다음은 Boost.Asio를 사용하여 간단한 TCP 클라이언트와 서버를 구현하는 예제 코드입니다.

클라이언트:

#include <iostream>
#include <boost/asio.hpp>

using namespace boost::asio;

int main() {
    io_context io_context;
    ip::tcp::socket socket(io_context);
    socket.connect(ip::tcp::endpoint(ip::address::from_string("127.0.0.1"), 1234));

    char data[1024];
    socket.async_read_some(buffer(data, 1024), [&](const boost::system::error_code& error, size_t bytes_transferred) {
        if (!error) {
            std::cout << "Received: " << std::string(data, bytes_transferred) << std::endl;
        }
    });

    io_context.run();
    return 0;
}

서버:

#include <iostream>
#include <boost/asio.hpp>

using namespace boost::asio;

int main() {
    io_context io_context;
    ip::tcp::acceptor acceptor(io_context, ip::tcp::endpoint(ip::tcp::v4(), 1234));
    ip::tcp::socket socket(io_context);
    acceptor.accept(socket);

    const std::string message = "Hello, client!";
    async_write(socket, buffer(message), [](const boost::system::error_code& error, size_t bytes_transferred) {
        if (!error) {
            std::cout << "Sent: " << message << std::endl;
        }
    });

    io_context.run();
    return 0;
}

위의 예제 코드는 Boost.Asio를 사용하여 간단한 TCP 클라이언트와 서버를 구현한 것입니다. 이를 참고하여 비동기 네트워크 입출력을 C++에서 구현할 수 있습니다.

참고문헌: