Boost Asio总结(16)例子
Posted thefist11
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;//输出接收到的字符串
以上是关于Boost Asio总结(16)例子的主要内容,如果未能解决你的问题,请参考以下文章