boost库在工作(27)网络客户端之二
2023-09-14 09:10:43 时间
由于一台服务器上可能存在多个服务,而每个服务使用了不同的端口,因而对一台服务器的查询,就可能返回多个服务的端口。为了表示多个服务,需要使用一个列表来表达多个服务存在。而访问一个列表,通常使用迭代设计模式来访问整个列表。因此就会使用下面的代码来进行域名解释:
// boost_020.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <boost/asio/ip/tcp.hpp >
#include <boost/asio.hpp>
#include <iostream>
//测试网络服务查询
//软件开发人员: 蔡军生 2013-06-02
//QQ: 9073204
void Test(void)
{
//定认一个查询端点对象。
boost::asio::ip::tcp::resolver::query query("www.boost.org", "http");
std::cout << "host_name: " << query.host_name() << " service_name:" << query.service_name()
<< std::endl;
//定义IO服务对象。
boost::asio::io_service ioService;
//定义解释对象。
boost::asio::ip::tcp::resolver resolver(ioService);
//进行域名或者服务解释,以便生成SOCKET内部使用的数据格式。
boost::asio::ip::tcp::resolver::iterator iterator = resolver.resolve(query);
boost::asio::ip::tcp::resolver::iterator itEnd;
if (iterator == itEnd)
{
return;
}
//解释成功之后, 显示解释后的IP地址和端口。
boost::asio::ip::tcp::endpoint endpoint = iterator->endpoint();
std:: cout << "host_ip: " << endpoint.address() << " port: " << endpoint.port() << std::endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
Test();
system("pause");
return 0;
}
在这个例子里,使用query来表示一个服务器的地址和服务类型,使用io_service来执行一个IO上的操作,使用resolver来表示一个域名和服务类型的解释操作,使用endpoint来表示一个端点的存在。所谓有端点,就是一个IP地址、一个服务、一种类型的综合体。就算同一个IP,同一个服务,也会有两个端点,因为IP地址的类型有两种:IPv4和IPv6。通过resolver对象解释回来的端点endpoint是直接可以使用到boost网络库的对象使用。如果存在多个端点的情况,就需要进行一个遍历操作,以便找到合适的端点连接。当然,也会有解释出错的情况,或者根本就不存在这个服务器,那么从resolver解释返回的结果集就会是空,这样它可以跟一个定义为空集的端点itEnd进行比较了,避免再进行下面的操作。
这个例子运行正确地输出如下:
host_name: www.boost.org service_name:http
host_ip: 129.79.13.33 port: 80
请按任意键继续. . .
相关文章
- 【云原生】多网络情况下,Kafka客户端如何选择合适的网络发起请求
- 云原生虚拟网络 tun/tap & veth-pair
- ntp时间同步端口_网络客户端协议没有了
- Docker 网络之redis集群搭建
- 克隆centos7后添加新网卡如何修改网络配置使其生效?
- [scientific reports | 论文简读] scCAN:使用自动编码器和网络融合的单细胞聚类算法
- SIGCOMM最佳博士论文花落可编程网络
- 【Java 网络编程】客户端 Socket 配置 ( 超时时间 | 端口复用 | Nagle 算法 | 心跳包机制 | 连接关闭机制 | 缓冲区大小 | 性能权重设置 | 紧急数据设置 )
- 区块链学习(5)比特币网络详解大数据
- 为Linux实现长久的网络联接(linux长连接)
- 连接解决Linux网络中TCP连接中断问题(linuxtcp断开)
- Linux 校园网客户端下载,探索校园无缝网络体验(linux校园网客户端)
- 使用虚拟机Linux连接网络(虚拟机linux连接网络)
- 安装Linux系统下的NS2网络仿真环境(linux安装ns2)
- Linux程序流量监控,助你掌握网络状况!(linux程序流量)
- 利用Linux实施网络压力测试(linux网络压力测试)
- 加速网络传输利器:Linux万兆网卡的应用实战(linux万兆网卡)
- 如何映射Linux网络驱动器?(映射linux网络驱动器)
- Linux网络中DSCP机制的应用(linux dscp)
- Oracle Web客户端让网络更加强大(oracle web客户端)
- Redis引领网络七层协议革新(redis 网络七层协议)
- python网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)