美文网首页
Boost asio实现的异步TCP/IP通信

Boost asio实现的异步TCP/IP通信

作者: hades2013 | 来源:发表于2018-05-02 13:45 被阅读0次

    asio库基于操作系统提供的异步机制,采用前摄器模式(Proactor)实现可移植的异步(或同步)IO操作,不需要使用多线程和锁,有效避免多线程编程带来的诸多有害副作用(如竞争,死锁)。

    asio封装了操作系统的select、kqueue、poll/epoll、overlapped I/O等机制,实现异步IO模型。在同步模式下,程序发起一个IO操作,向io_service提交请求,io_service把操作转交给操作系统,同步地等待。当IO操作完成时,操作系统通知io_service,然后io_service再把结果发回给程序,完成整个同步流程。在异步模式下,程序除了要发起IO操作,还要定义一个用于回调的完成处理函数。io_service同样把IO操作转交给操作系统执行,但它不同步等待,而是立即返回。调用io_service的run()成员函数可以等待异步操作完成,当异步操作完成时io_service从操作系统获取结果,在调用handler执行后续逻辑。

    Boost asio实现的异步TCP/IP通信:

    #include <iostream>
    #include <boost/asio.hpp>
    
    using namespace boost::asio;
    
    int main(int argc, char const *argv[])
    {
        io_service iosev; 
        ip::tcp::acceptor acceptor(iosev, ip::tcp::endpoint(ip::tcp::v4(), 1000));
        for(;;){
            ip::tcp::socket socket(iosev);
            acceptor.accept(socket);
            std::cout<<socket.remote_endpoint().address()<<std::endl; 
            boost::system::error_code ec; 
            socket.write_some(buffer("hello world1"), ec);
    
            if(ec){
                std::cout<<boost::system::system_error(ec).what()<<std::endl; 
                break; 
            }
        }
        return 0;
    }
    

    服务端文件asioServer.cpp 编译

    g++  -o asioServer asioServer.cpp -lboost_system
    
    #include <iostream>
    #include <boost/asio.hpp>
    
    using namespace boost::asio; 
    
    int main(int argc, char const *argv[])
    {
        io_service iosev; 
        ip::tcp::socket socket(iosev);
        ip::tcp::endpoint ep(ip::address_v4::from_string("127.0.0.1"), 1000);
    
        boost::system::error_code ec; 
        socket.connect(ep, ec);
        if(ec){
            std::cout<<boost::system::system_error(ec).what()<<std::endl; 
            return -1; 
        }
    
        char buf[100];
        size_t len = socket.read_some(buffer(buf), ec);
        std::cout.write(buf, len);
    
        return 0;
    }
    

    客户端编译asioClient.cpp :

    g++ -o asioClient asioClient.cpp -lboost_system

    相关文章

      网友评论

          本文标题:Boost asio实现的异步TCP/IP通信

          本文链接:https://www.haomeiwen.com/subject/umfcrftx.html