在java中,InetAddress.getLocalHost()和InetAddress.getByName(“127.0.0.1”)之间的区别是什么

时间:2013-12-02 15:15:16

标签: java networking udp

我正在使用 Windows 8 JDK 1.7 。我正在运行时,我的IP地址是192.168.1.108:

System.out.println(InetAddress.getLocalHost().equals(InetAddress.getByName("localhost"))); 

System.out.println(InetAddress.getLocalHost().equals(InetAddress.getByName("127.0.0.1")));

输出 - 这都是假的。

InetAddress.getLocalHost() - Output: 192.168.1.108      
InetAddress.getByName("localhost") - Output: 127.0.0.1

此外,我的UDP服务器绑定在InetAddress.getLocalHost()上,如果客户端将数据包发送到InetAddress.getByName("localhost"),它将无法从客户端接收任何内容。但是,如果客户端发送到InetAddress.getLocalHost().端口是正确的,则它可以正常工作。

有人知道区别吗?提前谢谢。

2 个答案:

答案 0 :(得分:1)

来自getLocalHost()的JDK文档:

  

返回本地主机的地址。这是通过从系统中检索主机名,然后将该名称解析为InetAddress来实现的。

在我的GNU / Linux框中,我的主机名是“laptop”,它被映射到/ etc / hosts中不同于127.0.0.1的地址。 Windows中的C:\ Windows \ System32 \ drivers \ etc \ hosts中有一个等效文件。

默认情况下,在DNS查找之前搜索此主机文件。

答案 1 :(得分:0)

ad1会在您的LAN / WAN中提供您的地址 (我的意思是本地/专用网络IP地址,例如 192.168.0.108或类似10.3.6.55)。

另见:

http://en.wikipedia.org/wiki/Private_network#Private_IPv4_address_spaces

http://download.java.net/jdk7/archive/b123/docs/api/java/net/InetAddress.html#getLocalHost%28%29

但请注意,ad2和ad3在我的示例中是相同的。

import java.net.InetAddress;

public class Test014 {

    public static void main(String[] args) throws Exception {
        InetAddress ad1 = InetAddress.getLocalHost();
        InetAddress ad2 = InetAddress.getByName("localhost");
        InetAddress ad3 = InetAddress.getByName("127.0.0.1");

        printArr(ad1.getAddress());
        printArr(ad2.getAddress());
        printArr(ad3.getAddress());

        System.out.println(ad1.equals(ad2));
        System.out.println(ad1.equals(ad3));
        System.out.println(ad2.equals(ad3));
    }

    static void printArr(byte[] arr){
        for (int i=0; i<arr.length; i++){
            System.out.print("[" + i + "] = " + arr[i] + "; ");
        }
        System.out.println();
        System.out.println("---------");
    }

}

另外,请检查API文档,了解equals方法何时返回true和false。

http://download.java.net/jdk7/archive/b123/docs/api/java/net/InetAddress.html#equals%28java.lang.Object%29