InetAddress.getLocalHost().getHostAddress()在Android中返回127.0.0.1

Mil*_*lan 5 sockets android network-programming

我的应用程序使用多播来发送信标以及协议消息和加入多播组的主机的IP.在Android设备中,它返回127.0.0.1.我环顾四周,发现有很多人建议更改主机文件.但是,在android的情况下,在我的上下文中是不可能的.如何获取设备的真实IP,而不是环回地址..

private void getLocalAddress()
{
    try {
        String localHost = InetAddress.getLocalHost().getHostAddress();
        servers.add(localHost);
    } catch (UnknownHostException e) {
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

Mil*_*lan 14

修改了几个位,这个位用于获取IPv4地址.!inetAddress.isLoopbackAddress()删除所有环回地址.!inetAddress.isLinkLocalAddress()和inetAddress.isSiteLocalAddress())删除所有IPv6地址.我希望这会帮助这里的人.

    StringBuilder IFCONFIG=new StringBuilder();
    try {
        for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
            NetworkInterface intf = en.nextElement();
            for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
                InetAddress inetAddress = enumIpAddr.nextElement();
                if (!inetAddress.isLoopbackAddress() && !inetAddress.isLinkLocalAddress() && inetAddress.isSiteLocalAddress()) {
                IFCONFIG.append(inetAddress.getHostAddress().toString()+"\n");
                }

            }
        }
    } catch (SocketException ex) {
        Log.e("LOG_TAG", ex.toString());
    }
    servers.add(IFCONFIG.toString());
Run Code Online (Sandbox Code Playgroud)