asio

asio是C++的准标准网络库,并且C++20标准库的网络部分将基于ASIO,需引入头文件#include <boost/asio.hpp>

ip地址

boost定义了表示ip地址的类型,支持ipv4和ipv6,提供ip::addressip::address_v4以及ip::address_v6三种类型。

  • 通过字符串构造ip地址:
#include <boost/asio.hpp>

namespace ba = boost::asio;
namespace bi = ba::ip; int main(int argc, char* argv[])
{
// 通过点分十进制转换为ipv4地址
bi::address addrV4 = bi::make_address("127.0.0.1");
assert(addrV4.is_v4()); // 通过十六进制转换为ipv6地址
bi::address addrV6 = bi::make_address("ABCD:EF01:2345:6789:ABCD:EF01:2345:6789");
assert(addrV6.is_v6()); // bi::address重载了流操作符,可以直接输出(所以也可以用boost::lexical_cast<string>(address))
std::cout << addrV4 << std::endl;
std::cout << addrV6 << std::endl; return 0;
}

ip地址+端口

对于tcp和udp两种协议,定义了对应的类型:ip::tcp::endpointip::udp::endpoint

  • 通过ip地址和端口号构造
int main(int argc, char* argv[])
{
// 端口号直接传入就行,不用转换为网络序
bi::tcp::endpoint ep(bi::make_address("127.0.0.1"), 1234); // endpoint也重载了流操作符
std::cout << ep << std::endl; return 0;
}

域名解析

asio中提供ip::tcp::resolverip::udp::resolver实现域名解析,相当于unix网络编程中的getaddrinfo()接口封装:

  • 解析指定域名和端口对应的ip地址和端口信息:
int main(int argc, char* argv[])
{
// 域名解析需要使用底层网络io
ba::io_context io;
bi::tcp::resolver resolver(io); // 对baidu域名进行解析
auto results = resolver.resolve("www.baidu.com", "https");
for (auto& entry : results) {
std::cout << entry.endpoint() << std::endl;
} return 0;
}

boost之asio的更多相关文章

  1. 开源网络库ACE、Boost的ASIO、libevent、libev、ZeroMQ

    开源C/C++网络库:ACE          C++语言 跨平台Boost的ASIO  C++语言 跨平台libevent     C语言   主要支持linux,新版增加了对windows的IOC ...

  2. boost的asio接收单路大数据量udp包的方法

    开发windows客户端接收RTP视频流,当h264视频达到1080P 60fps的时候,按包来调用recvfrom的函数压力比较大,存在丢包的问题,windows的完成端口的性能效果当然可以解决这个 ...

  3. boost库asio详解1——strand与io_service区别

    namespace { // strand提供串行执行, 能够保证线程安全, 同时被post或dispatch的方法, 不会被并发的执行. // io_service不能保证线程安全 boost::a ...

  4. boost中asio网络库多线程并发处理实现,以及asio在多线程模型中线程的调度情况和线程安全。

    1.实现多线程方法: 其实就是多个线程同时调用io_service::run for (int i = 0; i != m_nThreads; ++i)        {            boo ...

  5. 【Boost】boost库asio详解5——resolver与endpoint使用说明

    tcp::resolver一般和tcp::resolver::query结合用,通过query这个词顾名思义就知道它是用来查询socket的相应信息,一般而言我们关心socket的东东有address ...

  6. 【Boost】boost库asio详解3——io_service作为work pool

    无论如何使用,都能感觉到使用boost.asio实现服务器,不仅是一件非常轻松的事,而且代码很漂亮,逻辑也相当清晰,这点上很不同于ACE.使用io_service作为处理工作的work pool,可以 ...

  7. 【Boost】boost库asio详解2——io_service::run函数无任务时退出的问题

    io_service::work类可以使io_service::run函数在没有任务的时候仍然不返回,直至work对象被销毁. void test_asio_nowork() { boost::asi ...

  8. boost 编译 asio 程序,简单socket 编程

    自己第一次玩boost,对C++也非常不熟悉,记录一下自己的学习过程. 安装编译 boost 包解压到/opt下 tar -zxvf /media/C06EDE596EDE47B4/mnt/boost ...

  9. boost库asio详解8——几个TCP的简单例子

    摘于boost官网的几个例子, 做了点小修改, 笔记之. 同步客户端 void test_asio_synclient() { typedef boost::asio::io_service IoSe ...

随机推荐

  1. Nginx之https配置

    14.1. 对称加密 安全隐患:钥匙除我之外,还有多个人拥有.泄露风险较大,钥匙传递的过程风险较大 14.2. 非对称加密 优缺点:私钥很安全.但是非对称算法开销很大,大批量应用于业务,会导致性能成本 ...

  2. Netty进阶和实战

    实现UDP单播和广播 UDP 这样的无连接协议中,并没有持久化连接这样的概念,并且每个消息(一个UDP 数据报)都是一个单独的传输单元.此外,UDP 也没有TCP 的纠错机制. 通过类比,TCP 连接 ...

  3. GuestOS? HostOS?

    起因 今天在网上看到一篇文章  有几个陌生的关键词不太熟悉,就随笔记一下. 名词解释 # OS :操作系统 # VM(虚拟机)    里的OS 称为        GuestOS # 物理机      ...

  4. vps+v_2_ray+proxychains

    电脑系统换到Linux快半年了,之前一直没有解决的问题是怎么上google,毕竟有些东西还是google上好找一点.最近不想复习,没想到自己成功搭了个梯子,着实把惊喜了我一把.下面记录一下过程. 首先 ...

  5. 2020云栖大会智慧出行专场:聚焦高精地图/算法、智能模型、自动驾驶、AR导航

    2020云栖大会将于9月17日-18日在线举行,届时将通过官网为全球科技人带来前沿科技.技术产品.产业应用等领域的系列重要分享.   阿里巴巴高德地图携手合作伙伴精心筹备了“智慧出行”专场.我们将为大 ...

  6. sql注入--bool盲注,时间盲注

    盲注定义: 有时目标存在注入,但在页面上没有任何回显,此时,我们需要利用一些方法进行判断或者尝试得到数据,这个过程称之为盲注. 布尔盲注: 布尔盲注只有true跟false,也就是说它根据你的注入信息 ...

  7. 多图证明,Java到底是值传递还是引用传递?

    开篇先来曝答案,在 Java 语言中,本质只有值传递,而无引用传递,解释和证明详见正文. 说到值传递和引用传递我们不得不提到两个概念:值类型和引用类型. 1.值类型 通俗意义上来说,所谓的值类型指的就 ...

  8. git 修改已提交了的备注信息的方法

    git 修改已提交了的备注信息的方法: 1.当我们已通过 git commit -m '已提交的最新的备注' 命令将代码提交到了缓存区,或者进一步执行了 git push origin master ...

  9. day53:django:URL别名/反向解析&URL分发&命名空间&ORM多表操作修改/查询

    目录 1.URL别名&反向解析 2.URL分发&命名空间 3.ORM多表操作-修改 4.ORM多表操作-查询 4.1 基于对象的跨表查询 4.2 基于双下划线的跨表查询 4.3 聚合查 ...

  10. 5.Scalal语法03 - 函数