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