繁体   English   中英

如何在qt / linux中获取IP地址?

[英]How to get the ip address in qt/linux?

我正在研究Qt上的服务器客户端项目。 服务器在具有多个网络接口的计算机上运行。 设计是这样的,客户端将自动发现服务器。 即客户端将其IP广播到网络,服务器获取该消息并发回服务器的IP。 现在的问题是,当我尝试在服务器中获取IP时,有超过1个IP。 如何获取服务器收到消息的接口的IP?

这可能是您的解决方案

IPAddress FindLocalIPAddressOfIncomingPacket( senderAddr )
{
    foreach( adapter in EnumAllNetworkAdapters() )
    {
        adapterSubnet = adapter.subnetmask & adapter.ipaddress;
        senderSubnet = adapter.subnetmask & senderAddr;
        if( adapterSubnet == senderSubnet )
        {
            return adapter.ipaddress;
        }
    }
}

如何从udp-socket(C / C ++)获取自己的(本地)IP地址


为了获得传入的对等IP地址,您可以在C使用以下解决方案

socklen_t len;
struct sockaddr_storage addr;
char ipstr[INET6_ADDRSTRLEN];
int port;

len = sizeof addr;
getpeername(s, (struct sockaddr*)&addr, &len);

// deal with both IPv4 and IPv6:
if (addr.ss_family == AF_INET) {
    struct sockaddr_in *s = (struct sockaddr_in *)&addr;
    port = ntohs(s->sin_port);
    inet_ntop(AF_INET, &s->sin_addr, ipstr, sizeof ipstr);
} else { // AF_INET6
    struct sockaddr_in6 *s = (struct sockaddr_in6 *)&addr;
    port = ntohs(s->sin6_port);
    inet_ntop(AF_INET6, &s->sin6_addr, ipstr, sizeof ipstr);
}

printf("Peer IP address: %s\n", ipstr);

获取传入套接字连接的源地址

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM