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)例子的主要内容,如果未能解决你的问题,请参考以下文章

Boost Asio总结(16)httpServer例子

Boost Asio总结(16)异步通信例子

Boost Asio总结class address

boost::asio::ip::tcp实现网络通信的小例子

使用谷物序列化和boost :: asio的例子?

Boost::Asio入门剖析