Asio_7简单TCP

Example 7a

client--同步connect

#include 
#include 
#include 
#include 
#include
#include 
#include 

std::mutex global_lock;

void workerThread(std::shared_ptr io_service ){
    global_lock.lock();
    std::cout<run(ec);

        if(ec){
            global_lock.lock();
            std::cout< io_service(
        new asio::io_service);
    std::shared_ptr work(
    new asio::io_service::work(*io_service));

    std::shared_ptr strand=std::make_shared(*io_service);
    std::cout<<"Press Enter to exit"< ntid;
    for(int i=0;i<4;i++)
    {
        ntid.push_back(std::thread(workerThread,io_service));
    }

    tcp::socket socket(*io_service);
    try{
        tcp::resolver resolver(*io_service);
        tcp::resolver::query query("www.baidu.com","80");

        tcp::resolver::iterator iter=resolver.resolve(query);
        tcp::endpoint endpoint=*iter;;

        global_lock.lock();
        std::cout<stop();
    for(auto &iter:ntid){
        iter.join();
    }
    return 0;

}
image.png

Example 7b

client--异步

#include 
#include 
#include 
#include 
#include
#include 
#include 

std::mutex global_lock;

void workerThread(std::shared_ptr io_service ){
    global_lock.lock();
    std::cout<run(ec);

        if(ec){
            global_lock.lock();
            std::cout<socket){

    if(ec){
        global_lock.lock();
        std::cout< io_service(
        new asio::io_service);
    std::shared_ptr work(
    new asio::io_service::work(*io_service));

    std::shared_ptr strand=std::make_shared(*io_service);
    std::cout<<"Press Enter to exit"< ntid;
    for(int i=0;i<4;i++)
    {
        ntid.push_back(std::thread(workerThread,io_service));
    }

    std::shared_ptr socket=std::make_shared(*io_service);
    try{
        tcp::resolver resolver(*io_service);
        tcp::resolver::query query("www.baidu.com","80");

        tcp::resolver::iterator iter=resolver.resolve(query);
        tcp::endpoint endpoint=*iter;;

        global_lock.lock();
        std::cout<async_connect(endpoint,std::bind(OnConnect,std::placeholders::_1,socket));
    }
    catch(std::exception &e){
        global_lock.lock();
        std::cout<shutdown(tcp::socket::shutdown_both,ec);
    socket->close(ec);

    io_service->stop();
    for(auto &iter:ntid){
        iter.join();
    }
    return 0;

}
image.png

Example 7c

服务端:注意,以下程序只能接受一次连接。

#include 
#include 
#include 
#include 
#include
#include 
#include 

std::mutex global_lock;

void workerThread(std::shared_ptr io_service ){
    global_lock.lock();
    std::cout<run(ec);

        if(ec){
            global_lock.lock();
            std::cout<socket){

    if(ec){
        global_lock.lock();
        std::cout< io_service(
        new asio::io_service);
    std::shared_ptr work(
    new asio::io_service::work(*io_service));

    std::shared_ptr strand=std::make_shared(*io_service);
    std::cout<<"Press Enter to exit"< ntid;
    for(int i=0;i<4;i++)
    {
        ntid.push_back(std::thread(workerThread,io_service));
    }

    std::shared_ptr acceptor=std::make_shared(*io_service);
    std::shared_ptr socket=std::make_shared(*io_service);
    try{
        tcp::resolver resolver(*io_service);
        tcp::resolver::query query("127.0.0.1","8081");
        

        tcp::resolver::iterator iter=resolver.resolve(query);
        tcp::endpoint endpoint=*iter;;

        acceptor->open(endpoint.protocol());
        acceptor->set_option(tcp::acceptor::reuse_address(false));
        acceptor->bind(endpoint);
        acceptor->listen(asio::socket_base::max_connections);
        acceptor->async_accept(*socket,std::bind(OnAccept,std::placeholders::_1,socket));

        global_lock.lock();
        std::cout<shutdown(tcp::socket::shutdown_both,ec);
    socket->close(ec);

    io_service->stop();
    for(auto &iter:ntid){
        iter.join();
    }
    return 0;

}
image.png
image.png

你可能感兴趣的:(Asio_7简单TCP)