簡體   English   中英

Android,獲取用戶IP地址

[英]Android , get user ip address

我正在使用下面的方法來獲取客戶端IP:

public static String getIPAddress(boolean useIPv4) {
    try {
        List<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces());
        for (NetworkInterface intf : interfaces) {
            List<InetAddress> addrs = Collections.list(intf.getInetAddresses());
            for (InetAddress addr : addrs) {
                if (!addr.isLoopbackAddress()) {
                    String sAddr = addr.getHostAddress().toUpperCase();
                    boolean isIPv4 = InetAddressUtils.isIPv4Address(sAddr);
                    if (useIPv4) {
                        if (isIPv4)
                            return sAddr;
                    } else {
                        if (!isIPv4) {
                            int delim = sAddr.indexOf('%'); // drop ip6 port suffix
                            return delim<0 ? sAddr : sAddr.substring(0, delim);
                        }
                    }
                }
            }
        }
    } catch (Exception ex) { } // for now eat exceptions
    return "";
}

在我的套接字測試中,我的Genymotion模擬器在其狀態欄上有“192.168.56.101”,我可以運行套接字並連接到它,它工作正常,

但是在同一個模擬器中,當我運行此方法來獲取ip時,它將返回“10.0.3.15”,因為它必須返回“192.168.56.101”。

我不知道這怪異的地方來自哪里! ( “10.0.3.15”)

我如何獲得真正的用戶IP地址,我想通過套接字連接兩個人,所以我認為我必須有他們的IP,所以我可以連接它們,或者,這是一個更好的方法嗎?

這對我有用:

WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);
String ip = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());

10.0.3.15是Geneymotion中的localhost地址。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM