您的位置:首页 > 理论基础 > 计算机网络

boost::asio学习之[三 .2]异步tcp service

2014-04-13 21:41 411 查看
#pragma once

#include <ctime>
#include <boost/bind.hpp>
#include<boost/enable_shared_from_this.hpp>
#include <boost/asio.hpp>

namespace AsyService
{
using namespace boost::asio::ip;
class tcp_connection : public boost::enable_shared_from_this<tcp_connection>
{
public:
typedef boost::shared_ptr<tcp_connection> pointer;
static pointer create(boost::asio::io_service& io)
{
return pointer(new tcp_connection(io));
}

void start()
{
time_t now = std::time(0);
message_ = std::ctime(&now);
boost::asio::async_write(socket_, boost::asio::buffer(message_),
boost::bind(&tcp_connection::hand_write, shared_from_this(), boost::asio::placeholders::error));
}

tcp::socket& socket()
{
return socket_;
}

private:
tcp_connection(boost::asio::io_service& io)
:socket_(io)
{

}

void hand_write(const boost::system::error_code& error)
{
if (!error)
{

}
else
{

}
}

private:
tcp::socket socket_;
std::string message_;
};

class tcp_server
{
public:
tcp_server(boost::asio::io_service& io)
:acceptor_(io, tcp::endpoint(tcp::v4(), 6688))
{
start_accept();
}

void start_accept()
{
tcp_connection::pointer new_conn = tcp_connection::create(acceptor_.get_io_service());
acceptor_.async_accept(new_conn->socket(),
boost::bind(&tcp_server::hand_accept, this, new_conn, boost::asio::placeholders::error));
}

private:
void hand_accept(tcp_connection::pointer new_conn, const boost::system::error_code& error)
{
if (!error)
{
new_conn->start();
}
start_accept();
}

private:
tcp::acceptor acceptor_;
};

void asy_service()
{
try
{
boost::asio::io_service io;
tcp_server server(io);

io.run();

}
catch (std::exception& e)
{
std::cout << e.what() << std::endl;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  socket C++ boost server