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;
}

最新文章

  1. OEIS A140358
  2. ireport5.6+jasperreport6.3开发(五)--以javabean为基准的报表开发(action关联)
  3. Tomcat配置错误导致Quartz执行两次问题
  4. SAP 采购订单行项目中科目分配被隐藏,发现行项目设置中显示字段长度为0
  5. 性能测试一般过程与LR性能测试过程
  6. Eclipse插件项目 引用其他类库的方法(jar)
  7. php ssh2 scp问题解决
  8. tomcant报错The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path
  9. 黑马程序员——JAVA基础之内部类,匿名内部类
  10. FZU Problem 2136 取糖果
  11. -25299 reason: &#39;Couldn&#39;t add the Keychain Item.&#39;
  12. CSS两列及三列自适应布局方法整理
  13. Spring depends-on介绍
  14. JQuery事件机制笔记
  15. Error:Execution failed for task &#39;:app:processDebugGoogleServices&#39;. &gt; No matching client found for package name &#39;com.fortythree.sos.flashlight&#39;
  16. Android网络传输中必用的两个加密算法:MD5 和 RSA 及Base64加密总结
  17. ListView常见的优化方式简述
  18. openstack--10--知识点补充
  19. vector和list
  20. vuejs-devtools浏览器调试chrome插件

热门文章

  1. Git 实用操作:撤销 Commit 提交
  2. .NET性能排查
  3. 数据库增量备份,恢复innobackex
  4. 【原创】解BUG-xenomai内核与linux内核时间子系统之间存在漂移
  5. python中实现参数化的原理
  6. OneNote代码高亮完美解决方案(全网最全)
  7. redis-port支持前缀迁移
  8. 快速了解前端开发HTML的正确姿势
  9. Android开发中导入第三方库所遇问题记录
  10. 吴恩达Machine Learning学习笔记(三)--逻辑回归+正则化