无法在 qt/qml 应用程序上检索 ipv4 地址

问题描述

我有一个 qt/qml 应用程序,我部署在带有 BSP 的 imx6 上,我必须检索 eth0 接口的 ipv4 地址。为了部署应用程序,我设置了一个静态 ip,我可以使用下面的代码正确检索它:

QNetworkInterface eth0Ip = QNetworkInterface::interfaceFromName("eth0");
QList<QNetworkAddressEntry>entries = eth0Ip.addressEntries();
if(!entries.isEmpty() && entries.first().ip().isLoopback() == false)
{
    ipAddress = entries.first().ip().toString();
}

但是当我将电路板连接到 QList 中的路由器时,我只有一个带有 ipv6 地址的条目,但没有 ipv4。在路由器页面中,我可以看到电路板分配了 ipv4,我可以正确使用它通过 ssh 进行连接。显示的 ipv6 不可翻译为 v4。 我尝试了其他带有系统调用解决方案来检索地址,但结果始终相同: 解决方案 1:

 int fd;
 struct ifreq ifr;

 fd = socket(AF_INET,SOCK_DGRAM,0);

 ifr.ifr_addr.sa_family = AF_INET;

 strncpy(ifr.ifr_name,"eth0",IFNAMSIZ-1);

 ioctl(fd,SIocgIFADDR,&ifr);

 close(fd);

 ipAddress = QString(inet_ntoa(((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr));

解决方案 2:

struct ifaddrs *ifaddr,*ifa;
int s;
char host[NI_MAXHOST];

if (getifaddrs(&ifaddr) == -1)
{
    ipAddress = "getifaddrs error";
    return;
}
  
for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next)

{
    if (ifa->ifa_addr == NULL)
        continue;

    s=getnameinfo(ifa->ifa_addr,sizeof(struct sockaddr_in),host,NI_MAXHOST,NULL,NI_NUMERICHOST);

    if((strcmp(ifa->ifa_name,"eth0")==0)&&(ifa->ifa_addr->sa_family==AF_INET))
    {
        ipAddress = QString(host);
    }
}

当我通过 ssh 连接并使用 ifconfig 时,我可以看到分配的正确 ipv4 和 ipv6,但在应用程序上看不到。 有什么想法吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)