zoukankan      html  css  js  c++  java
  • 第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() << "
    ";
        }
    }
  • 相关阅读:
    最近想读的书想做的事
    syslogng 正确配置udp接受端口
    (转)iPhone重绘机制drawRect
    .Net工具整理
    用系统的网格还是用自己的网格
    将主关键字加强为适应多个
    onblur与onbeforedeactivate的区别
    模式窗口中无法转向
    实现获取客户端的MAC地址(3)
    onkeypress、onkeydown、onkeyup三事件的区别
  • 原文地址:https://www.cnblogs.com/javastart/p/6773901.html
Copyright © 2011-2022 走看看