Boost.Asio는 C++에서 동기 및 비동기 방식의 네트워크 및 저수준 I/O 프로그래밍을 위한 강력한 라이브러리입니다. Boost 라이브러리의 일부로, TCP/UDP 소켓, 직렬 포트, 타이머 등 다양한 I/O 기능을 제공합니다.
---
🧠 개요: Boost.Asio로 할 수 있는 것들
TCP/UDP 소켓 통신 (클라이언트/서버)
타이머 (deadline timer, steady timer 등)
직렬 포트 통신
SSL 통신 (OpenSSL과 연동)
동기 및 비동기 I/O 처리
---
🚀 기본 개념 정리
io_context (또는 io_service): 모든 비동기 작업의 실행 컨텍스트.
socket: TCP/UDP 등의 네트워크 소켓.
resolver: DNS 이름 해석.
acceptor: 서버에서 클라이언트 연결을 수락.
async_* 함수들: 비동기 처리를 위한 함수들.
핸들러 (callback): 비동기 작업이 끝났을 때 호출되는 함수.
---
✅ TCP 서버 예제 (동기 방식)
#include <boost/asio.hpp>
#include <iostream>
using boost::asio::ip::tcp;
int main() {
boost::asio::io_context io;
// 1234 포트에서 대기
tcp::acceptor acceptor(io, tcp::endpoint(tcp::v4(), 1234));
std::cout << "Waiting for connection..." << std::endl;
tcp::socket socket(io);
acceptor.accept(socket); // 클라이언트 연결 대기 (blocking)
std::cout << "Client connected!" << std::endl;
std::string message = "Hello from server!";
boost::system::error_code ec;
boost::asio::write(socket, boost::asio::buffer(message), ec);
if (!ec)
std::cout << "Message sent." << std::endl;
else
std::cout << "Error: " << ec.message() << std::endl;
return 0;
}
---
✅ TCP 클라이언트 예제 (동기 방식)
#include <boost/asio.hpp>
#include <iostream>
using boost::asio::ip::tcp;
int main() {
boost::asio::io_context io;
tcp::resolver resolver(io);
auto endpoints = resolver.resolve("127.0.0.1", "1234");
tcp::socket socket(io);
boost::asio::connect(socket, endpoints);
std::cout << "Connected to server!" << std::endl;
char data[1024];
size_t len = socket.read_some(boost::asio::buffer(data));
std::cout << "Received: " << std::string(data, len) << std::endl;
return 0;
}
---
🔁 비동기 방식의 핵심 흐름
비동기 처리에서는 다음 패턴을 따릅니다:
1. io_context 객체 생성
2. 비동기 함수 호출 (e.g., async_accept, async_read)
3. 핸들러(callback)에서 작업 처리
4. io_context.run() 호출하여 I/O 이벤트 루프 실행
---
💡 참고 팁
비동기 작업을 위해서는 run() 루프가 계속 돌아야 하므로 스레드나 이벤트 루프와 함께 사용하는 것이 반적입니다.
실제 서비스에서는 strand를 사용하여 동기화 문제를 피합니다.
SSL 소켓을 다룰 땐 boost::asio::ssl::stream을 사용해야 합니다.
---
📚 추가 자료
공식 문서: https://www.boost.org/doc/libs/release/doc/html/boost_asio.html
실전 예제: Boost.Asio examples 디렉토리
책 추천: C++ Network Programming 시리즈
---
원하는 게 TCP 서버/클라이언트, UDP, 비동기 구조, 또는 SSL 통신인지 구체적으로 알려주시면 더 자세한 예제를 드릴 수 있어요.
카테고리 없음