Java网络编程之InetAddress类

InetAddress类是JAVA中用于描述IP地址的类,它在java.net包中。在JAVA中分别用Inet4Address和Inet6Address类来描述IPv4和IPv6的地址。这两类都是InetAddress的子类。由于InetAddress没有public的构造方法,因此,要想创建InetAddress对象,必须依靠它的四个静态方法。

getLocalHost方法
用来得到描述本机IP的InetAddress对象。当查找不到本机主机的地址时,触发异常。代码如下

package MyInetAddress;

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

public class MyInetAddress {
    public static void main(String[] args) throws Exception
    {
        try{
            InetAddress localAddress = InetAddress.getLocalHost();
            System.out.println(localAddress);
        }
        catch (UnknownHostException el){
            el.printStackTrace();
        }

    }
}

结果显示:

Java网络编程之InetAddress类_第1张图片

此程序运行结果不同主机的主机名和IP地址是不同的

在InetAddress类中覆盖了Object类中的toString方法,实现如下

public String toString() {
        String hostName = holder().getHostName();
        return ((hostName != null) ? hostName : "")
            + "/" + getHostAddress();
    }

InetAddress方法中的toString方法返回了用“/”隔开的主机名和IP地址。因此上面可以直接通过localAddress对象来输出本机名和IP地址,在将对象参数传入println方法后,println方法会调用对象参数的toString方法来输出结果。
本机绑定多个IP时,getLocalHost只返回第一个IP。如果像返回本机全部的IP,可以使用getAllByName方法。

getByName方法
getByName方法是InetAddress类最常用的方法。它可以通过指定域名从DNS中得到相应的IP地址。
Java网络编程之InetAddress类_第2张图片
如果host所指的域名对应多个IP,getByName返回第一个IP。如果本机名已知可以使用getByName方法来代替getLocalHost。当host的值是localhost时,返回值一般是127.0.0.1,若host是不存在的域名,getByName将抛出异常,如果host是IP地址,无论这个IP地址是否存在,都会返回这个IP地址(因为getByName并不验证IP地址的正确性),下面写一个demo

package MygetByName;
import java.net.*;

public class MygetByName {
    public static void main(String[] args) throws Exception{
        if(args.length == 0)
            return;
        String host = args[0];
        try{
            InetAddress address = InetAddress.getByName(host);
            System.out.println(address);
        }
        catch(UnknownHostException el){
            el.printStackTrace();
        }
    }
}

注意给主函数传参,若使用控制台,则直接在正常编译命令后面加对应参数,若使用eclipse,则在run as里选中 run configuration 
,选择第2个选项卡 (x)=Arguments ,在Program arguments里输入参数,点下Apply,最后再点Run ,若使用idea,则在run下的Exit Configurations中配置Configuration分页中的Program arguments选项,就可以进行传参
Java网络编程之InetAddress类_第3张图片

运行结果:
Java网络编程之InetAddress类_第4张图片

getAllByName方法
可以从DNS上得到域名对应的所有IP

package MygetAllByName;

import java.net.InetAddress;

public class MygetAllByName {
    public static void main(String[] args) throws Exception{
        if(args.length == 0)
            return;
        String host = args[0];
        InetAddress addressses[] = InetAddress.getAllByName(host);
        for(InetAddress address : addressses)
            System.out.println(address);
    }
}

结果如下
Java网络编程之InetAddress类_第5张图片

getHostAddress方法
用来得到主机的IP地址
方法定义如下

public String getHostAddress()

demo如下

package MygetHostAddress;
import java.net.*;

public class MygetHostAddresss {
    public static void main(String[] args){
        try{
            InetAddress ad = InetAddress.getByName(args[0]);
            System.out.println("IP 地址为; " + ad.getHostAddress());
        }catch(UnknownHostException el){
            el.printStackTrace();
        }
    }
}

getAddress方法
与getHostAddrsss方法唯一区别是getHostAddress方法赴安徽的是字符串形式的IP地址,getAddress反水的是Byte数组形式的IP地址。可用来判断是ipv4 or ipv6,也可用来判断是ABC哪类地址。demo如下

package MygetAddress;
import java.net.*;

public class MygetAddress {
    public static void main(String[] args){
        try{
            InetAddress inetadd = InetAddress.getLocalHost();
            byte[] address = inetadd.getAddress();
            if(address.length == 4)
            {
                System.out.println("The IP version is ipv4");
                int firstbyte = address[0];
                if(firstbyte < 0)
                    firstbyte += 256;
                System.out.println(firstbyte);
                if(firstbyte <= 127)
                    System.out.println("A");
                else if(firstbyte >=128 && firstbyte <= 191)
                    System.out.println("B");
                else if(firstbyte >=192 && firstbyte <= 223)
                    System.out.println("C");
            }else if(address.length == 16)
                System.out.println("ipv6");
        }catch (Exception e)
        {};
    }
}

getHostName方法
根据给定IP地址查找主机名
 

package MygetHostName;
import java.net.*;

public class MygetHostName {
    public static void main(String[] args){
        try{
            InetAddress inetadd;
            inetadd = InetAddress.getLocalHost();
            System.out.println("HostName = " + inetadd.getHostName());
            System.out.println(inetadd.toString());
        }catch(Exception e){
            System.out.println(e);
        }
    }
}

 

你可能感兴趣的:(网络编程)