我正在使用 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().
端口是正确的,则它可以正常工作。
有人知道区别吗?提前谢谢。
答案 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。