InetAddress类之创建新的InetAddress对象

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

创建新的InetAddress对象

InetAddress类没有公共构造函数。实际上,InetAddress有一些静态工厂方法,可以连接到DNS服务器来解析主机名。最常用的是InetAddress.getByName()。 例如,可以如下查找www.oreilly.com:

InetAddress address = InetAddress.getByName("www.oreilly.com");

这个方法并不只是设置InetAddress类中的一个私有String字段。实际上它会建立与本地DNS服务器的一个连接,来查找名字和数字地址(如果你之前查找过这个主机,这个信息可能会在本地缓存,如果是这样,就不需要再建立网络连接)。如果DNS服务器找不到这个地址,这个方法会抛出一个UnknownHostException异常,这是IOException的一个子类。

下例展示了一个完整的程序,它为www.oreilly.com创建一个InetAddress对象,这里包括所有必要的导入和异常处理:

package o2;

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

public class OreillyByName {
    public static void main(String[] args) {
        try {
            InetAddress address = InetAddress.getByName("www.oreilly.com");
            System.out.println(address.getHostAddress());
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }
}

之前我们提到过www.oreilly.com实际上有两个地址。getByName()返回哪一个地址是不确定的。如果出于某种原因你需要得到一个主机的所有地址,可以调用getAllByName(),它会返回一个数组:

package o2;

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

public class OreillyByName {
    public static void main(String[] args) {
        try {
            InetAddress[] addrs = InetAddress.getAllByName("www.oreilly.com");
            if(addrs != null && addrs.length > 0){
                for(InetAddress addr : addrs){
                    System.out.println(addr.getHostAddress());
                }
            }
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }
}

最后,getLocalHost()方法会为运行这个代码的主机返回一个InetAddress对象:

InetAddress me = InetAddress.getLocalHost();

这个方法尝试连接DNS来得到一个真正的主机名和IP地址,如“elharo.laptop.corp.com”和“192.1.254.68”; 不过如果失败,它就会返回回送地址,即主机名“localhost”和点分四段地址“127.0.0.1”。查找本地机器的地址示例:

package o2;

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

public class MyAddress {
    public static void main(String[] args) {
        try {
            InetAddress address = InetAddress.getLocalHost();
            System.out.println(address.getHostAddress());
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }
}


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。