欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

7.1(java学习笔记)InetAddress&InetScoketAddress

程序员文章站 2023-11-23 21:50:04
一、InetAddress 这个类主要表示IP地址.InetAddress封装了IP地址和域名。域名可以看做IP地址的一个别称,起这个别称的目的是为了便于记忆。 例如www.baidu.com 就是119.75.217.109的别称,在浏览器地址栏输入119.75.217.109同样可以访问百度首页 ......

一、inetaddress

   这个类主要表示ip地址.inetaddress封装了ip地址和域名。域名可以看做ip地址的一个别称,起这个别称的目的是为了便于记忆。

   例如www.baidu.com 就是119.75.217.109的别称,在浏览器地址栏输入119.75.217.109同样可以访问百度首页。明显这个别称更好记忆。

   inetaddress封装了ip地址和域名,总之里面的address就是ip地址,name就是这个地址的别称。

  

  1.1构造方法,改类的构造方法无法直接调用,需通过返回值为inetaddress的方法来获取对象。

    static inetaddress getbyname(string host)//根据主机名(可以看做本地电脑的域名)返回inetaddress对象。

    host可为ip地址、域名的字符串表示。

    static inetaddress getbyaddress(byte[] addr)//初始化参数为ip地址的字节数组表示,

    例如 new byte[]{(byte)192,(byte)168,(byte)0,(byte)81}

    static inetaddress getbyaddress(string host,byte[] addr)//返回host,addr设置的对应对象

    static inetaddress getlocalhost()//返回代表本机ip、域名的inetaddress对象。

  

  2.2主要方法

    string gethostname()//获取该对象的主机名

    string gethostaddress()//获取该对象的ip地址

 

  2.3 例子

    

import java.net.inetaddress;
import java.net.unknownhostexception;

public class testnet {
    public static void main(string[] args) throws unknownhostexception {
        //inetaddress 封装了ip和dns(域名)
        inetaddress localhost = inetaddress.getlocalhost();//返回代表本地inetaddress对象
        system.out.println(localhost.gethostname());//获取该该对象的ip域名     ni
        system.out.println(localhost.gethostaddress());//获取该对象的ip地址  192.168.17.1
        inetaddress a = inetaddress.getbyname("localhost");//返回该域名所代表的inetaddres对象
        system.out.println(a.gethostname());//获取该对象代表的域名               localhost
        system.out.println(a.gethostaddress());//获取该对象代表的ip地址 127.0.0.1
        inetaddress b = inetaddress.getbyname("192.168.17.1");//返回该ip地址所代表的inetaddress对象
        system.out.println(b.gethostname());//返回该对象所代表域名    ni
        system.out.println(b.gethostaddress());//返回该对象的ip地址 192.168.17.1
    }
}
ni
192.168.17.1
localhost
127.0.0.1
ni
192.168.17.1

 上述使用的都是本机地址,所以都可以将ip地址转换为域名。但某些其他外部网络地址会出现无法通过ip解析成域名的情况。

 

api中有这样一句话:

inetaddress类提供了将主机名解析为ip地址的方法,反之亦然。

将ip地址解析为域名时,如果存在安全管理器,则此方法首先使用主机名和-1作为参数调用其checkconnect方法,

以查看是否允许调用代码知道此ip地址的主机名,即是否连接到主机。如果不允许操作,它将返回ip地址的文本表示。

如果允许则返回域名。

 

import java.net.inetaddress;
import java.net.inetsocketaddress;
import java.net.unknownhostexception;

public class testnet {
    public static void main(string[] args) throws unknownhostexception {
        inetaddress b = inetaddress.getbyname("www.baidu.com");
        system.out.println(b.gethostname());
        system.out.println(b.gethostaddress());
    }
}
运行结果:
www.baidu.com 119.75.217.109

如果将static inetaddress getbyname(string host)中的host设置为119.75.217.109,

会导致无法解析的情况发生,这时返回的域名就是这个ip地址本身的文本表示。

import java.net.inetaddress;
import java.net.inetsocketaddress;
import java.net.unknownhostexception;

public class testnet {
    public static void main(string[] args) throws unknownhostexception {
        inetaddress b = inetaddress.getbyname("119.75.217.109");
        system.out.println(b.gethostname());
        system.out.println(b.gethostaddress());
    }
}
运行结果;
119.75.217.109
119.75.217.109

 简而言之,如果能将ip地址解析成域名gethostname就返回域名,如果不能则返回ip地址本身。

 

二、inetsocketaddress

  inetsocketaddress在inetaddress的基础上封装了端口。

  

  2.1构造方法

  inetsocketaddress(inetaddress addr, int port)

  inetsocketaddress(string hostname, int port)

  //构造方法,hostname可为ip地址也可为主机名 port端口号

  传递参数为string 类型的ostname实际上内部是将string hostname转换为了inetaddress addr。

  7.1(java学习笔记)InetAddress&InetScoketAddress

  其中的

  7.1(java学习笔记)InetAddress&InetScoketAddress

  

  2.2主要方法

  int getport()//获取端口号

  string gethostname()//获取主机名
  inetaddress getaddress()//返回一个inetaddress对象

 

  2.3例子

   

import java.net.inetsocketaddress;
import java.net.unknownhostexception;

public class testnet {
    public static void main(string[] args) throws unknownhostexception {
        //最好不要分配1024以下的端口
        inetsocketaddress i = new inetsocketaddress("localhost",2048);//初始化,域名|主机名|地址
        //inetsocketaddress e = new inetsocketaddress("127.0.0.1",2049);
        system.out.println(i.getaddress().gethostname());
        system.out.println(i.getport());//端口号
        inetaddress ia = i.getaddress();//返回一个inetaddress对象
        system.out.println(ia.gethostname());//后续就可以调用inetaddress中的方法对其操作 (主机名)
        system.out.println(ia.gethostaddress());//主机ip地址
    }
}
运行结果:
localhost
2048
localhost
127.0.0.1