1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > boost库使用—asio库

boost库使用—asio库

时间:2020-04-06 09:25:31

相关推荐

boost库使用—asio库

boost库使用—asio库

****

一、boost库asio简介

Boost Asio ( asynchronous input and output)关注异步输入输出。Boost Asio库提供了平台无关性的异步数据处理能力(当然它也支持同步数据处理)。一般的数据传输过程需要通过函数的返回值来判断数据传输是否成功。Boost Asio将数据传输分为两个独立的步骤:

采用异步任务的方式开始 数据传输。将传输结果通知调用端

​ 与传统方式相比,优点在于程序在数据传输期间不会阻塞。

二、API介绍

Boost.Asio的所有内容都包含在boost::asio命名空间或者其子命名空间内。

boost::asio:这是核心类和函数所在的地方。重要的类有io_service和streambuf。类似read, read_at, read_until方法,它们的异步方法,它们的写方法和异步写方法等自由函数也在这里。boost::asio::ip:这是网络通信部分所在的地方。重要的类有address, endpoint, tcp, udp和icmp,重要的自由函数有connect和async_connect。要注意的是在boost::asio::ip::tcp::socket中间,socket只是boost::asio::ip::tcp类中间的一个typedef关键字。boost::asio::error:这个命名空间包含了调用I/O例程时返回的错误码boost::asio::ssl:包含了SSL处理类的命名空间boost::asio::local:这个命名空间包含了POSIX特性的类

IP地址

对于IP地址的处理,Boost.Asio提供了ip::address , ip::address_v4和ip::address_v6类。 它们提供了相当多的函数。下面列出了最重要的几个:

ip::address(v4_or_v6_address):这个函数把一个v4或者v6的地址转换成ip::addressip::address:from_string(str):这个函数根据一个IPv4地址(用.隔开的)或者一个IPv6地址(十六进制表示)创建一个地址。ip::address::to_string():这个函数返回这个地址的字符串。ip::address_v4::broadcast([addr, mask]):这个函数创建了一个广播地址ip::address_v4::any():这个函数返回一个能表示任意地址的地址。ip::address_v4::loopback(), ip_address_v6::loopback():这个函数返回环路地址(为v4/v6协议)ip::host_name():这个函数用string数据类型返回当前的主机名。

大多数情况你会选择用ip::address::from_string:

ip::address addr = ip::address::from_string("127.0.0.1");

如果你想通过一个主机名进行连接,下面的代码片段是无用的:

// 抛出异常ip::address addr = ip::address::from_string("");

三、案例

同步客户端+服务端

cli:

#include <iostream>#include <boost/asio.hpp>using namespace std;int main()try{cout << "client start...." << endl;//io_service对象boost::asio::io_service ios;//创建socket对象boost::asio::ip::tcp::socket sock(ios);//创建连接端boost::asio::ip::tcp::endpoint ep(boost::asio::ip::address::from_string("127.0.0.1"),6688);//连接sock.connect(ep);//定义一个缓冲区//vector<char>str(100,0);char data[128];sock.read_some(boost::asio::buffer(data));cout << "recive from "<<sock.remote_endpoint().address() << endl;cout << data << endl;system("pause");return 0;}catch (exception& e){cout << e.what()<< endl;}

ser:

#include <iostream>#include <boost/asio.hpp>using namespace std;int main()try{cout << "server start..." << endl;//io_service对象boost::asio::io_service ios;//绑定端口6688boost::asio::ip::tcp::acceptor acceptor(ios,boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(),6688));cout << acceptor.local_endpoint().address() << endl;while (1){//socket对象boost::asio::ip::tcp::socket sock(ios);//阻塞等待socket连接acceptor.accept(sock);cout << "client:" ;cout << sock.remote_endpoint().address() << endl;sock.write_some(boost::asio::buffer("hello asio"));}return 0;}catch (exception& e){cout <<e.what() << endl;}

想了解学习更多C++后台服务器方面的知识,请关注:

微信公众号:C++后台服务器开发

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。