【问题标题】:Android, accessing device IP address using "Inet4Address.getLocalHost().getHostAddress();" throws exceptionAndroid,使用“Inet4Address.getLocalHost().getHostAddress();”访问设备IP地址抛出异常
【发布时间】:2018-01-26 01:26:31
【问题描述】:

所以我有一个正在运行和启动的应用程序,我希望能够获取 IP 地址并将其显示为字符串。我一直在使用下面的代码。

String ipAddress = "";
try{
   ipAddress = Inet4Address.getLocalHost().getHostAddress();
}
catch(Exception e){
   ipAddress = "IP address Cant be used";
}

每次运行它都会返回“IP 地址无法使用”,因此它会抛出错误。

【问题讨论】:

  • 打印出异常怎么样?
  • 是的,我只是输出了异常。它说“android.os.NetworkOnMainThreadException”
  • 您是否搜索过您的错误? stackoverflow.com/questions/6343166/…
  • 是的。我应该首先打印错误。

标签: android networking ip-address inetaddress


【解决方案1】:

如果您希望获得面向公众的 IP,请查看此answer。简而言之,您无法获得面向公众的 IP,因为网络地址转换不会发生在您的内核中,即您没有将 IP 分配给自己,而是通过 NAT 和 DHCP 将其提供给您。以下代码向亚马逊的 aws IP API 发出请求,以检索您的 IP

public static String getIp() throws Exception {
    URL whatismyip = new URL("http://checkip.amazonaws.com");
    BufferedReader in = null;
    try {
        in = new BufferedReader(new InputStreamReader(
                whatismyip.openStream()));
        String ip = in.readLine();
        return ip;
    } finally {
        if (in != null) {
            try {
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

【讨论】:

  • 对不起,我正在尝试访问网络地址。无论如何,谢谢。
  • @aaron 这得到了 WAN IP...虽然,它仍然需要一个 AsyncTask
猜你喜欢
  • 2019-12-09
  • 1970-01-01
  • 2022-11-22
  • 2015-07-08
  • 2011-03-17
  • 1970-01-01
  • 2017-05-15
  • 1970-01-01
  • 2013-11-16
相关资源
最近更新 更多