boost之asio
asio
asio是C++的准标准网络库,并且C++20标准库的网络部分将基于ASIO,需引入头文件#include <boost/asio.hpp>。
ip地址
boost定义了表示ip地址的类型,支持ipv4和ipv6,提供ip::address和ip::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::endpoint和ip::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::resolver和ip::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的更多相关文章
- 开源网络库ACE、Boost的ASIO、libevent、libev、ZeroMQ
开源C/C++网络库:ACE C++语言 跨平台Boost的ASIO C++语言 跨平台libevent C语言 主要支持linux,新版增加了对windows的IOC ...
- boost的asio接收单路大数据量udp包的方法
开发windows客户端接收RTP视频流,当h264视频达到1080P 60fps的时候,按包来调用recvfrom的函数压力比较大,存在丢包的问题,windows的完成端口的性能效果当然可以解决这个 ...
- boost库asio详解1——strand与io_service区别
namespace { // strand提供串行执行, 能够保证线程安全, 同时被post或dispatch的方法, 不会被并发的执行. // io_service不能保证线程安全 boost::a ...
- boost中asio网络库多线程并发处理实现,以及asio在多线程模型中线程的调度情况和线程安全。
1.实现多线程方法: 其实就是多个线程同时调用io_service::run for (int i = 0; i != m_nThreads; ++i) { boo ...
- 【Boost】boost库asio详解5——resolver与endpoint使用说明
tcp::resolver一般和tcp::resolver::query结合用,通过query这个词顾名思义就知道它是用来查询socket的相应信息,一般而言我们关心socket的东东有address ...
- 【Boost】boost库asio详解3——io_service作为work pool
无论如何使用,都能感觉到使用boost.asio实现服务器,不仅是一件非常轻松的事,而且代码很漂亮,逻辑也相当清晰,这点上很不同于ACE.使用io_service作为处理工作的work pool,可以 ...
- 【Boost】boost库asio详解2——io_service::run函数无任务时退出的问题
io_service::work类可以使io_service::run函数在没有任务的时候仍然不返回,直至work对象被销毁. void test_asio_nowork() { boost::asi ...
- boost 编译 asio 程序,简单socket 编程
自己第一次玩boost,对C++也非常不熟悉,记录一下自己的学习过程. 安装编译 boost 包解压到/opt下 tar -zxvf /media/C06EDE596EDE47B4/mnt/boost ...
- boost库asio详解8——几个TCP的简单例子
摘于boost官网的几个例子, 做了点小修改, 笔记之. 同步客户端 void test_asio_synclient() { typedef boost::asio::io_service IoSe ...
随机推荐
- 浅谈DOM事件的优化
在 JavaScript 程序的开发中,经常会用到一些频繁触发的 DOM 事件,如 mousemove.resize,还有不是那么常用的鼠标滚轮事件:mousewheel (在 Firefox 中,滚 ...
- 【Azure DevOps系列】使ASP.NET Core应用程序托管到Azure Web App Service
使用Azure DevOps Project设置ASP.NET项目 我们需要先在Azure面板中创建一个Azure WebApp服务,此处步骤我将省略,然后点击部署中心如下图所示: 此处我选择的是Az ...
- Azure Storage 系列(五)通过Azure.Cosmos.Table 类库在.Net 上使用 Table Storage
一,引言 上一篇文章我们在.NET 项目中添加了 “WindowsAzure.Storage” 的 NuGet 包进行操作Table 数据,但是使用的 “WindowsAzure.Storage” ...
- NGINX 负载均衡的理解
前言 NGINX是轻量级,也是当前比较流行的web服务器软件.体积小但是功能强大. 这里我按照自己的理解,记录下对NGINX负载均衡的认识.(加权均衡,最小连接) 这里参考了 [https://blo ...
- [SSM项目]三-日志Logback
Logback介绍 Logback的主要模块 logback-access :与service容器集成,提供通过http访问日志的功能.即第三方软件可以通过这个模块来访问日志. logback-cla ...
- Magicodes.IE 2.3重磅发布——.NET Core开源导入导出库
在2.3这一版本的更新中,我们迎来了众多的使用者.贡献者,在这个里程碑中我们也添加并修复了一些功能.对于新特点的功能我将在下面进行详细的描述,当然也欢迎更多的人可以加入进来,再或者也很期待大家来提is ...
- 高可用集群之keepalived+lvs实战2
keepalived简介 lvs在我之前的博客<高负载集群实战之lvs负载均衡-技术流ken>中已经进行了详细的介绍和应用,在这里就不再赘述.这篇博文将把lvs与keepalived相结合 ...
- springboot之零碎小知识
1.springboot启动类加载yml配置项 主要是如下方法,读取了yml的配置项,赋值为类成员属性 @Autowired public void setEnvironment(Environmen ...
- CRM、用户管理权限
CRM目录结构 from django.shortcuts import HttpResponse,render,redirect from django.conf.urls import url f ...
- (转)CrudRepository JpaRepository PagingAndSortingRepository之间的区别
1. 简介 本文介绍三种不同的Spring Data repository和它们的功能,包含以下三种: CrudRepository PagingAndSortingRepository JpaRep ...