0

我在网上找到了两个示例来获取路由器给我的电脑的 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 地址,即我的路由器给出的那个(例如在 ubuntu 的终端中写入 ifconfig,或者在 windows 中写入 ipconfig),而是返回我的环回地址...(127.0 .0.1) 为什么?

4

2 回答 2

4

您的 PC 有多个接口(至少两个)和多个 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());
        }
    }
}
于 2013-02-09T19:34:17.023 回答
1

通常,您的主机有一个指向环回接口的名称。分配了 IP 地址的 DHCP 服务器。根据您的 dhcp 客户端配置,主机也可能采用新名称。

于 2013-02-09T19:42:36.227 回答