Java 使用InetAddress获取自己的IP地址

Java 使用InetAddress获取自己的IP地址,java,android,network-programming,inetaddress,Java,Android,Network Programming,Inetaddress,我有一个问题,如果我尝试使用InetAddress.getLocalHost,甚至是InetAddress.getByNameString主机,它每次都会抛出一个异常,即使是像nba.com这样的已知网站,我也有点困惑,仅供参考,目标设备是安卓4.1.1 GS3,并且wifi和移动网络都处于打开状态。代码如下 try{ InetAddress ownIP=InetAddress.getLocalHost(); System.out.println

我有一个问题,如果我尝试使用InetAddress.getLocalHost,甚至是InetAddress.getByNameString主机,它每次都会抛出一个异常,即使是像nba.com这样的已知网站,我也有点困惑,仅供参考,目标设备是安卓4.1.1 GS3,并且wifi和移动网络都处于打开状态。代码如下

         try{
        InetAddress ownIP=InetAddress.getLocalHost();
        System.out.println("IP of my Android := "+ownIP.getHostAddress());
        }catch (Exception e){
            System.out.println("Exception caught ="+e.getMessage());
            String t =  e.getMessage() + "yes";
        }
下面是系统输出

03-12 18:59:52.636:I/System.out18996:Exception Capture=null


提前感谢

我使用了一种棘手的方法来获取自己的IP。你可以看看它是否对你有帮助

String getIP() {
    try {
        Socket socket = new Socket("google.com", 80);
        return socket.getLocalAddress().getHostAddress();
    } catch (Exception e) {

    }
}

我使用了一种巧妙的方法来获得自己的IP。你可以看看它是否对你有帮助

String getIP() {
    try {
        Socket socket = new Socket("google.com", 80);
        return socket.getLocalAddress().getHostAddress();
    } catch (Exception e) {

    }
}

我相信我已经发现了我的问题基本上是什么我猜你不允许在android的主线程中执行任何网络操作这以前是可选的,现在是蜂巢API 11所必需的,下面是根据谷歌规范的评论

为了防止阻塞主用户界面线程,Google建议使用android.os包中的AsyncTask类:

所以我所做的就是创建一个新的类NetTask,它扩展了AsyncTask并执行所有网络应用程序,所以现在我的代码可以正常工作了。IDK,如果其他人都知道,但我想我会发布这个,以防像我这样的新手仍然在寻找解决方案:


谢谢

我相信我已经发现我的问题基本上是什么我猜你不允许在android的主线程中执行任何网络操作这以前是可选的,现在是蜂巢API 11所必需的,下面是根据谷歌规范的评论

为了防止阻塞主用户界面线程,Google建议使用android.os包中的AsyncTask类:

所以我所做的就是创建一个新的类NetTask,它扩展了AsyncTask并执行所有网络应用程序,所以现在我的代码可以正常工作了。IDK,如果其他人都知道,但我想我会发布这个,以防像我这样的新手仍然在寻找解决方案:

谢谢

如果InetAddress.getLocalHost确实引发异常,请看这篇文章。如果InetAddress.getLocalHost确实引发异常,请看这篇文章。如果InetAddress.getLocalHost确实引发异常,请看你的主机文件和/或DNS配置严重错误。