2013-02-09 58 views
0

我在網上找到兩個例子來獲取路由器給我的電腦的IP地址。 下面是代碼:Java:在我的家庭網絡中獲取我自己的IP地址

import java.net.InetAddress; 
import java.net.UnknownHostException; 

public class tryNet { 

public static void displayStuff(String whichHost, InetAddress inetAddr) { 
    System.out.println("---------------------"); 
    System.out.println("host: " + whichHost); 
    System.out.println("Canonical host name: " + inetAddr.getCanonicalHostName()); 
    System.out.println("Host Name: " + inetAddr.getHostName()); 
    System.out.println("Host Address: " + inetAddr.getHostAddress()); 
    System.out.println("---------------------"); 
} 


public static void main(String argv[]) { 
    try { 
     InetAddress inetAddr = InetAddress.getLocalHost(); 
     displayStuff("localhost", inetAddr); 
    } 

    catch (UnknownHostException e) { 
     e.printStackTrace(); 
    } 
} 

} 

我已閱讀,在已經初始化 的InetAddress的InetAddr = InetAddress.getLocalHost(); 我可以使用方法 inetAddr.getHostAddress() 獲取我的IP地址,我的路由器給出的IP地址(例如在ubuntu的終端中寫入ifconfig或在Windows中使用ipconfig) 取而代之,它返回我的回送地址。 ..(127.0.0.1) 爲什麼?

+0

如果存在安全管理器,則使用本地主機名和-1作爲其參數調用其checkConnect方法,以查看是否允許執行該操作。如果操作不被允許,代表環回地址的InetAddress被返回....也許它的這個安全管理器給我127.0.0.1 ...是否有可能避免它? – user1576208 2013-02-09 17:09:42

+0

除非您確定您的代碼運行所在的主機永遠不會多宿主(即具有多個IP地址),否則您不能依賴'InetAddress.getLocalHost()'。在生產代碼中應該避免使用'InetAddress.getLocalHost()'。 – peterh 2013-10-03 07:22:38

回答

4

您的電腦有多個接口(至少兩個)和多個IP地址(如果它插入網絡,當然)。通常,localhost將解析爲127.0.0.1(在回送接口上),並且您正在使用的各種方法將返回該結果。

下面將告訴你分配給他們的機器上的所有接口和IP地址:

public static void main(String[] args) throws InterruptedException, IOException 
{ 
    Enumeration<NetworkInterface> e = NetworkInterface.getNetworkInterfaces(); 
    while (e.hasMoreElements()) 
    { 
     NetworkInterface n = e.nextElement(); 
     System.out.println(n.getName()); 
     Enumeration<InetAddress> ee = n.getInetAddresses(); 
     while (ee.hasMoreElements()) 
     { 
      InetAddress i = ee.nextElement(); 
      System.out.println(i.getHostAddress()); 
     } 
    } 
} 
1

通常,您的主機有一個指向Loopback接口的名稱。 DHCP服務器分配了一個IP地址。根據您的DHCP客戶端配置主機也可能會採用一個新名稱。