第7月第27天 c++11 boost
1.
#include <boost/asio.hpp> #include <cstdlib> #include <memory> namespace asio = boost::asio; namespace sys = boost::system; using boost::asio::ip::tcp; struct session : public std::enable_shared_from_this<session> { session(tcp::socket socket) : socket_(std::move(socket)) {} void start() { do_read(); } private: void do_read() { auto self(shared_from_this()); socket_.async_read_some( asio::buffer(data_, max_length), [this, self](sys::error_code ec, std::size_t length) { if (!ec) { do_write(length); } }); } void do_write(std::size_t length) { auto self(shared_from_this()); async_write(socket_, asio::buffer(data_, length), [this, self](sys::error_code ec, std::size_t /*length*/) { if (!ec) { do_read(); } }); } private: tcp::socket socket_; enum { max_length = 1024 }; char data_[max_length]; }; struct server { server(asio::io_service &io_service, short port) : acceptor_(io_service, tcp::endpoint(tcp::v4(), port)), socket_(io_service) { do_accept(); } void do_accept() { acceptor_.async_accept(socket_, [this](sys::error_code ec) { if (!ec) { std::make_shared<session>(std::move(socket_))->start(); } do_accept(); }); } tcp::acceptor acceptor_; tcp::socket socket_; }; int main(int argc, char *argv[]) { try { if (argc != 2) { //std::cerr << "Usage: "; } asio::io_service io_service; server s(io_service, std::atoi("8888")); io_service.run(); } catch (const std::exception &e) { //std::cerr << "Exception: " << e.what() << "\n"; } }