语言/QT {QHostInfo(域名转IP地址)}

本文介绍了使用Qt库中的QHostInfo进行域名到IP地址转换的方法,包括堵塞方式和异步方式,以及如何处理查询结果和中止查询。着重讲解了lookupHost()的异步操作和hostName()的含义。
摘要由CSDN通过智能技术生成

语言/QT {QHostInfo(域名转IP地址)}

QHostInfo(域名转IP地址)

定义

需求: 根据域名 查询他的IP地址;

每一次查询 他都是一个网络通讯的过程(即去查询远程DNS服务器), 这一次查询 就是一个QHostInfo对象;

方式0(堵塞方式): QHostInfo ret = QHostInfo::fromName("域名");, 这是堵塞方式 即只有当DNS服务器返回过来结果ret后 你程序才能运行;
方式1(异步方式): int id = QHostInfo::lookupHost( ui->lineEdit_port->text(), this, [&]( const QHostInfo & _ret){}};, 这就很像是一个信号与槽, 即你程序会正常运行 当DNS服务器返回过来结果后 他就会调用你的第三个参数(槽函数), 结果在_ret里面; 这个函数返回值id 表示此时后台有一个ID=id的QHostInfo 他正在运行(即给远程DNS发送查询 然后等待服务器的返回结果), QHostInfo内部 他肯定会保证 你所有的查询(即QHostInfo对象) 他们的id号是不同的; 假如很长时间都没反应 那么你可以调用QHostInfo::abortHostLookup(id) 来中止他;

性质

fromName(), lookupHost()的参数 通常我们都放域名, 即根据域名来查询IP地址;
其实你放入IP地址 也可以; 比如fromName( "127.0.0.1") 他的结果里的hostName() 会是你的主机名;

@DELI;

hostName 虽然翻译是主机名, 其实他表示的是域名(即www.baidu.com);

代码

多重集合<int> S;

//> 查询
int id = QHostInfo::lookupHost( "域名", this, [&]( const QHostInfo & _ret){
    if( S.find( _ret.lookupId()) == S.end()){ 报警(异常);}
    S.erase( S.find( _ret.lookupId()));
    
    if( _ret.error() == QHostInfo::NoError){
        `_ret.hostName()`域名的IP地址是 `_ret.addresses()`;
    }
    else{
        报警( 查询域名`_ret.hostName()`失败, _ret.error(), _ret.errorString());
    }
});

//> 中止(后台正在进行查询的任务 都终止把);
for( auto id : S){ QHostInfo::abortHostLookup( id);}

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值