2012-02-03 129 views
5

我的應用程序使用多播在期間發送信標以及加入多播組的主機的IP。在Android設備中,它返回127.0.0.1。我環顧四周,發現許多人建議更改主機文件。但是,在Android的情況下,在我的情況下是不可能的。我如何獲得的設備,而不是回送地址的真實IP ..InetAddress.getLocalHost()。getHostAddress()在Android中返回127.0.0.1

private void getLocalAddress() 
{ 
    try { 
     String localHost = InetAddress.getLocalHost().getHostAddress(); 
     servers.add(localHost); 
    } catch (UnknownHostException e) { 
     e.printStackTrace(); 
    } 
} 
+1

在我的手機上,除非Wi-Fi已激活且已連接到Wi-Fi網絡,否則它沒有IP地址。如果沒有本地地址,那麼'getLocalHost'返回你得到的回送地址。 – 2012-02-03 11:42:41

+0

@JoachimPileborg試試我的答案。我希望這會解決你的問題。 – himanshu 2012-02-03 11:46:25

回答

11

修改了幾個位,這個按照想要獲取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()); 
+0

爲了確保沒有人忘記它,您需要在您的AndroidManifest.xml中使用INTERNET權限: 2016-10-05 19:07:55

0

試試這個: -

String hostname = args[0]; 
try 
    { 
     InetAddress ipaddress = InetAddress.getByName(hostname); 
     System.out.println("IP address: " + ipaddress.getHostAddress()); 
    } 
    catch (UnknownHostException e) 
    { 
     System.out.println("Could not find IP address for: " + hostname); 
    } 
+0

當我的應用程序出貨..你覺得有可能爲使用該應用程序的所有用戶提供主機名?你知道任何其他方式來找到它嗎? – Milan 2012-02-03 18:46:55

0

從我的嘗試,最大的我能得到是WiFi網絡地址。

我不知道任何其他方式,而不是實際調用一個返回IP地址的Web服務器。顯然,問題在於它使用電話數據。

相關問題