【问题标题】:getHostAddress() returns a reversed ip addressgetHostAddress() 返回一个反向的 ip 地址
【发布时间】:2015-07-08 08:48:36
【问题描述】:

我正在尝试使用 WifiManager 和 WifiInfo 类获取我的手机 IP 地址。

它返回正确的IP地址反转。

public String getWifiIpAddress() {
    WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);
    WifiInfo wi = wm.getConnectionInfo();

    byte[] ipAddress = BigInteger.valueOf(wi.getIpAddress()).toByteArray();
    try {
        InetAddress myAddr = InetAddress.getByAddress(ipAddress);
        String hostAddr = myAddr.getHostAddress();
        return hostAddr;
    } catch (UnknownHostException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return "";
}

结果:73.0.168.192

【问题讨论】:

  • 我是在我的设备上完成的。
  • 我认为这是一个字节序问题。你有没有尝试过这样的事情? stackoverflow.com/questions/1936857/…。使用 ByteBuffer,您可以更改可能是问题的字节顺序

标签: java android ipv4


【解决方案1】:

好的,我刚刚看到你的地址倒了! :)

这被称为大/小端问题,请阅读更多关于 Endianness 的信息,这是所有程序员都必须了解的,尤其是在不同操作系统上进行应用程序集成和迁移时。

在从 Wifi 管理器获取连接信息后添加。

int ipAddress = wi.getIpAddress();

ipAddress = (ByteOrder.nativeOrder().equals(ByteOrder.LITTLE_ENDIAN)) ? 
                Integer.reverseBytes(ipAddress) : ipAddress;

然后使用 toByteArray 和 getHostAddress 等继续您的代码。

【讨论】:

  • 即使我连接到局域网,我还能得到IP地址吗?
猜你喜欢
  • 2012-01-03
  • 1970-01-01
  • 2019-09-10
  • 2015-10-08
  • 1970-01-01
  • 2017-04-28
  • 1970-01-01
  • 1970-01-01
  • 2019-11-01
相关资源
最近更新 更多