[c++] C++에서의 비동기 네트워크 입출력
C++에서 비동기 네트워크 입출력을 위해 유용한 라이브러리는 Boost.Asio입니다. Boost.Asio는 네트워크 및 입출력 작업에 대한 효율적인 비동기 처리를 제공합니다.
Boost.Asio를 사용하여 비동기 네트워크 입출력을 수행하는 방법은 다음과 같습니다.
- io_context를 생성하여 비동기 작업을 관리합니다.
- 네트워크 소켓을 생성하고 연결합니다. 이때 asio::ip::tcp::socket을 사용하여 TCP 소켓을 만들고 연결할 수 있습니다.
- 비동기로 데이터를 읽거나 쓰기 위해 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++에서 구현할 수 있습니다.
참고문헌:
- Boost.Asio 공식 문서: https://www.boost.org/doc/libs/1_75_0/doc/html/boost_asio.html