Qt确定给定的主机名是否指向localhost

时间:2016-05-10 14:44:20

标签: qt localhost hostname network-interface

我的应用程序连接到tcp服务器。我希望知道它与服务器应用程序在同一主机上运行,​​因此如果服务器进程没有启动,它最终会直接启动它。

当服务器侦听接口并且应用程序解析了一个主机名以连接到服务器时,对于我来说,确定用于连接服务器的已配置主机名是否指向与该服务器相同的主机并不是那么明显。服务器与否。

我喜欢这样的事情:

bool isThisLocalHost(QString hostName) {
     //resolve hostname's address
     //list localhost interfaces ip or hw addresses ?
     //if the hostname address matches one of the host interfaces address
     //pseudo code         
     bool bRes = interfaces_addresses_list.contains(hostname_address);

     return bRes;
}

我实际上是想用这个来实现这个目标 QNetworkInterface,QNetworkAddressEntry,QHostInfo,QHostAddress。

也许有一种简单的方法?

2 个答案:

答案 0 :(得分:0)

QHostAddress拥有isLoopback(),可以满足您的需求。

如果您只是想知道自己是否与自己联系,那么(部分?)是this question的副本。

答案 1 :(得分:0)

这是我得到的:

bool isThisLocalHost(QString hostName) {
    QList <QHostAddress> lAddrHostName = QHostInfo::fromName(hostName).addresses();
    QList <QHostAddress> lAddrLocalHostInterfaces = QNetworkInterface::allAddresses();
    bool bRes = false;
    foreach (QHostAddress addr, lAddrHostName) {
        bRes = bRes || lAddrLocalHostInterfaces.contains(addr);
    }
return bRes;
}