第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";
    }
}

 

posted @ 2017-04-27 13:53  lianhuaren  阅读(192)  评论(0编辑  收藏  举报