zoukankan      html  css  js  c++  java
  • 7.1(java学习笔记)InetAddress&InetScoketAddress

    一、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。

      

      其中的

      

      

      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
  • 相关阅读:
    oracle 监听 添加ip
    重装系统windows
    oracle user pwd
    mybatis
    sum行列合计
    IIS8.5 运行WCF
    exp自动备份在bat中不执行
    oem 重建
    yum install oracle-validated
    MSHflexgrid控件删除选中行
  • 原文地址:https://www.cnblogs.com/huang-changfan/p/9911829.html
Copyright © 2011-2022 走看看