Examples & Reference
---------------------------------------------------------------------------------------------
Examples
Reference
Memo
---------------------------------------------------------------------------------------------
1. 송신
boost::asio::io_service io_service; // io_service object생성. thread safe 하므로 여러개의 thread
// 가 하나의 io_service 사용 가능.
tcp::endpoint endpoint(tcp::v4(), (int)portNo); // TCP, UDP 방식과 수신할 포트 번호를 설정한다.
tcp::accepter accepter(io_service, endpoint) ; // 수신할 객체를 선언한다.
// 이또한 TCP와 UDP방식이 있다.
tcp::socket socket(io_service);
accepter.async_accept(socket, handlerfunc);
또는
accepter.accept(socket);
handlerfunc 에서는 두가지 일을 한다.
1. 들어온 녀석에 대한 처리
- 클라이언트로부터 보내는 값 받기
boost::asio::async_read(socket,
boost::asio::buffer(const void * data, std::size_t max_size_in_bytes),
boost::bind( readHandlerfunc, boost::asio::placeholders::error)
또는
boost::asio::read 를 사용 (사용방법은 Reference참조)
2. async_accept에 대한 새로운 socket을 만들어 수신 대기 상태로 만든다.
io_service.run(); io_service 를 시작한다.
readHandlerfunc
1. 에러 체크
void readHandlerfunc( const boost::system::error_code& error)
{
if (!error)
{
boost::asio::async_read(socket_,
boost::asio::buffer(const void* data, std::size_t max_size_in_bytes),
boost::bind(
}
2. 수신
try
{
boost::asio::io_service io_service;
tcp::resolver resolver(io_service);
tcp::resolver::query query(const char* host, const char* port);
tcp::resolver::iterator iter = resolver.resolve(query);
tcp::resolver::iterator end;
tcp::socket socket(io_service);
boost::system::error_code error = boost::asio::error::host_not_found;
while ( error && endpoint_iterator != end ) // IPv4 와v6를 검사하여 연결이 되는 쪽을 찾는 루틴
{
socket.close();
socket.connect(*iter++, error);
}
if ( error )
throw boost::system::system_error(error);
for (;;)
{
boost::array<char, 128> buf;
boost::system::error_code error;
size_t len = socket.read_some(boost::asio::buffer(buf), error);
if (error == boost::asio::error::eof)
break; // Connection closed cleanly by peer.
else if (error)
throw boost::system::system_error(error); // Some other error.
std::cout.write(buf.data(), len);
}
}
catch (std::exception& e)
{
std::cerr << e.what() << std::endl;
}
'Tools for Dev' 카테고리의 다른 글
boost::shared_ptr (0) | 2008.10.08 |
---|---|
boost::asio 를 이용한 asyncronous communication 클래스 (0) | 2008.10.07 |
boost::enable_shared_from_this (0) | 2008.10.01 |
boost test (0) | 2008.09.12 |
boost Serialization (0) | 2008.09.04 |
댓글