#include#include#include#include#include#include#includeusingasio::ip::tcp;
std::stringmake_daytime_string()
{usingnamespacestd;//For time_t, time and ctime;time_t now=time(0);returnctime(&now);
}classtcp_connection
:publicboost::enable_shared_from_this{public:
typedef boost::shared_ptrpointer;staticpointer create(asio::io_service&io_service)
{returnpointer(newtcp_connection(io_service));
}
tcp::socket&socket()
{returnsocket_;
}voidstart()
{
message_=make_daytime_string();
asio::async_write(socket_, asio::buffer(message_),
boost::bind(&tcp_connection::handle_write, shared_from_this(),
asio::placeholders::error,
asio::placeholders::bytes_transferred));
}private:
tcp_connection(asio::io_service&io_service)
: socket_(io_service)
{
}voidhandle_write(constasio::error&/*error*/,
size_t/*bytes_transferred*/)
{
}
tcp::socket socket_;
std::stringmessage_;
};classtcp_server
{public:
tcp_server(asio::io_service&io_service)
: acceptor_(io_service, tcp::endpoint(tcp::v4(),13))
{
start_accept();
}private:voidstart_accept()
{
tcp_connection::pointer new_connection=tcp_connection::create(acceptor_.io_service());
acceptor_.async_accept(new_connection->socket(),
boost::bind(&tcp_server::handle_accept,this, new_connection,
asio::placeholders::error));
}voidhandle_accept(tcp_connection::pointer new_connection,constasio::error&error)
{if(!error)
{
new_connection->start();
start_accept();
}
}
tcp::acceptor acceptor_;
};intmain()
{try{
asio::io_service io_service;
tcp_server server(io_service);
io_service.run();
}catch(std::exception&e)
{
std::cerr<
}return0;
}