JAVA网络编程-Internet地址
IP和DNS
连接到Internet的设备称为节点,计算机节点称为主机.每个节点或主机都由至少一个唯一的数来标识,这称为Internet地址或者IP地址.目前大多数的IP地址是4个字节长,这被称作IPv4地址.不过,一小部分IP地址是16字节长,这被称作IPv6地址.IP地址对于人们来说是很难记忆的数字,为了避免到处携带记满IP地址的通讯录,Internet的设计者发明了域名系统(Domain Name System DNS).DNS将人们可以记忆的主机名与计算机可以记住的IP地址关联在一起。服务器通常至少有一个主机名。客户端往往有一个主机名,但也可能没有,特别是有些客户端的IP地址会在启动时动态指定。
有些IP有多个DNS,多个域名对应一个IP地址。也有一个域名映射多个IP地址的情况,这时就要由DNS服务器负责随机选择一台机器来相应各个请求。每台连接到Internet的计算机都能访问到一个称为域名服务器的机器,它通常时一个运行特殊DNS软件的UNIX主机,这种软件了解不同主机名和IP地址之间的映射。大多数域名服务器只直到其本地网络上主机的地址,以及其他网站中一些域名服务器地址。如果客户端请求本地域名之外一个机器的地址,本地域名服务器就会询问远程位置的域名服务器,在将答案转发给请求者。
大多数情况下,可以使用主机名而让DNS处理向IP地址的转换。只要能连接到一个域名服务器,就不需要担心你的机器,本地域名服务器和Internet其他部分之间传递主机名和地址的有关细节。前提是你的机器必须连接到Internet.
InetAddress对象
public static void main(String[] args) throws Exception {//通过域名获取IP InetAddress i = InetAddress.getByName("www.oreilly.com"); System.out.println("~~~ " + i.getHostAddress());//104.86.0.99 System.out.println("~~~ " + i.getHostName());//www.oreilly.com }
public class Test {//通过域名获取所有地址 public static void main(String[] args) throws Exception { InetAddress[] is = InetAddress.getAllByName("www.baidu.com"); for(InetAddress address: is) { System.out.println("~~~ " + address.getHostAddress()); System.out.println("~~~ " + address.getHostName()); } } }
~~~ 110.242.68.3
~~~ www.baidu.com
~~~ 110.242.68.4
~~~ www.baidu.com
public static void main(String[] args) throws Exception {//获取本机的主机名和IP地址 InetAddress me = InetAddress.getLocalHost(); System.out.println(me.getHostName());//DESKTOP-MLQ0UUB System.out.println(me.getHostAddress());//169.254.49.55 }
public static void main(String[] args) throws Exception {//测试主机是否可达 InetAddress me = InetAddress.getByName("www.baidu.com"); System.out.println(me.isReachable(1000)); }