Boost Asio总结(16)例子

step1. 创建io_server实例(在Boost1.66后的版本为io_context)

boost::asio::io_service io_service;

step2. 设置endpoint的地址ip和端口

unsigned short port = 8080;

. 客户端client

 auto const address = boost::asio::ip::address_v4::from_string("192.168.0.123");
boost::asio::ip::tcp::endpoint endpoint(address,port);

. server设置要接受连接的端口和协议类型

boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::tcp::v4(),port);//ipv4,侦听端口8080

step3.创建socket实例

boost::asio::ip::tcp::socket socket(io_service);

.客户端client,建立到endpoint的socket连接

socket.connect(endpoint);//同步
socket.async_connect(endpoint,[](){
    
    });//异步,需要回调函数,这里使用的是lambda表达式

. 服务器端server

//创建acceptor实例,并开始侦听Socket连接
acceptor.accept(socket)//同步,运行到此处时会阻塞线程知道侦听到client的连接请求
socket.async_accept(socket,[](){
    
    });//异步,需要回调函数,这里使用的是lambda表达式

step4.对Socket进行读写操作,客户端相同

boost::asio::write(socket,boost::asio::buffer("hello world!"));    //向socket中写入字符

std::cout<<socket.available()<<std::endl;          //获取可读取的字节数
std::vector<char> str(socket.available()+1,0)//定义一个vector缓冲区    socket.receive(boost::asio::buffer(str));          //使用buffer()包装缓冲区并接收数据
std::cout<<"client received: "<<&str[0]<<std::endl;//输出接收到的字符串

猜你喜欢

转载自blog.csdn.net/thefist11cc/article/details/123675459