首页 > 代码库 > boost asio库 同步socket连接示例

boost asio库 同步socket连接示例

<pre name="code" class="cpp">///////////////////////////////////////
//  Asio同步socket连接示例
//
#include <iostream>
#include <boost/thread.hpp>
#include <boost/asio/io_service.hpp>
#include <boost/asio.hpp>
using namespace boost;
typedef boost::asio::io_service IoService;
typedef boost::asio::ip::tcp TCP;
bool flag=true;

void client()  
{
    int i=0;
    while(i++<10)
    {
        this_thread::sleep(posix_time::seconds(1)); //延时函数
        try
        {
        IoService ios;
        TCP::socket so(ios);
        TCP::endpoint ep(asio::ip::address::from_string("127.0.0.1"),9999); //绑定对方的ip和端口
        so.connect(ep);
        char str[100]={0};
        so.read_some(asio::buffer(str)); //接收服务器端送回的消息
        std::cout<<"client: read from ser:"<<str<<std::endl;

        }
        catch(std::exception&e)
        {
            std::cout<<e.what()<<std::endl;
        }
    }
    flag=false;
}

int main()
{
try
{
    IoService ios;
    TCP::acceptor my_acceptor(ios,TCP::endpoint(TCP::v4(),9999));  //服务器段绑定协议和端口
    std::cout<<my_acceptor.local_endpoint().address()<<std::endl;

    thread tc(&client);  //开一个线程执行客户端
    while(flag) //服务器端循环接收客户端socket
    {
        std::cout<<"waiting for client..."<<std::endl;
        TCP::socket mysocket(ios);
        my_acceptor.accept(mysocket);  
        mysocket.write_some(asio::buffer("hahahahah")); //向客户端写数据
    }
    tc.join();
}
catch(std::exception&e)
{
    std::cout<<e.what()<<std::endl;
}
    return 0;
}