• InetAddress类


    InetAddress类是Java对IP地址(包括IPv4和IPv6)的高层表示。大多数其他网络类都要用到这个类,包括Socket,ServerSocket,URL,DatagramSocket,DatagramPacket等。一般来讲,它包括一个主机名和一个IP地址。

    创建InetAddress对象

    通过主机名创建

    package com.dy.xidian;
    

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

    public class Create {

    </span><span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span><span style="color: #000000"> main(String[] args){
        </span><span style="color: #0000ff">try</span><span style="color: #000000"> {
            </span><span style="color: #008000">//</span><span style="color: #008000">查询我的网站IP</span>
            InetAddress address = InetAddress.getByName("www.xdysite.cn"<span style="color: #000000">);
            System.out.println(</span>"my site:"+<span style="color: #000000">address.getHostAddress());
            </span><span style="color: #008000">//</span><span style="color: #008000">查询百度的所有IP</span>
            InetAddress[] baidu = InetAddress.getAllByName("www.baidu.com"<span style="color: #000000">);
            System.out.println(</span>"baidu:"<span style="color: #000000">);
            </span><span style="color: #0000ff">for</span><span style="color: #000000">(InetAddress addr : baidu)
                System.out.println(</span>"	"+<span style="color: #000000">addr.getHostAddress());
            </span><span style="color: #008000">//</span><span style="color: #008000">查询本机IP
            </span><span style="color: #008000">//</span><span style="color: #008000">如果主机名存在且是一个FQDN的话,那么会得到真实的IP地址,否则会得到127.0.0.1</span>
            InetAddress local =<span style="color: #000000"> InetAddress.getLocalHost();
            System.out.println(</span>"local:"+<span style="color: #000000">local.getHostAddress());
        } </span><span style="color: #0000ff">catch</span><span style="color: #000000"> (UnknownHostException e) {
            e.printStackTrace();
        }
    }
    

    }

    传入的参数为主机名,在构建InetAddress对象时,会去DNS服务器中获取对应的地址,如果在DNS中查找不到对应的IP地址,前两个会抛异常(UnknownHostException),getLocalHost()则会返回localhost和127.0.0.1。

    通过IP创建

    InetAddress address = InetAddress.getByName("202.117.119.1");
    System.out.println(address.getHostName());

    传入的是IP地址,则在构建InetAddress时不会去检查DNS。只有当显示的调用了getHostName(),才会完成主机名的DNS查找。

    可达性测试

    InetAddress类有两个isReachable(),来测试目标地址是否可达。

    try{
          InetAddress address = InetAddress.getByName("www.xdysite.cn");
          if(address.isReachable(2000))
               System.out.println("可以连接到该主机");
          else
               System.out.println("无法连接");
          }catch(Exception e){
                e.printStackTrace();
    }

    该方法会使用ICMP echo请求来查看指定地址是否可达。isReachable()的参数是超时时间timeout,单位为毫秒。如果在timeout之内有响应,则返回true,否则返回false。

    equals方法

    InetAddress类重写了equals方法。如果一个对象本身是InetAddress类的实例,而且与一个InetAddress对象有相同的IP地址,则这两个对象通过equals方法进行判断是相等的。

    public static void main(String[] args){
            try{
                InetAddress address1 = InetAddress.getByName("www.xdysite.cn");
                InetAddress address2 = InetAddress.getByName("test.xdysite.cn");
                if(address1.equals(address2))
                    System.out.println("相同");
                else
                    System.out.println("不同");
            }catch(Exception e){
                e.printStackTrace();
            }
        }

    www.xdysite.cn与test.xdysite.cn指向同一台主机,所以上面的代码运行后会输出相同。

  • 相关阅读:
    第13课-信号通讯
    第12课-有名管道通讯
    第11课-无名管道通讯
    第10课-进程控制
    第9课-时间编程
    【JVM 知识体系框架总结】
    【深入浅出-口语】(3):自然发音
    【深入浅出-JVM】(76):classloader
    【深入浅出-JVM】(75):class 装载
    【深入浅出-JVM】(77):SPI
  • 原文地址:https://www.cnblogs.com/xidongyu/p/6096858.html
Copyright © 2020-2023  润新知