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
  • 相关阅读:
    Core Animation 文档翻译—附录C(KVC扩展)
    Core Animation 文档翻译—附录B(可动画的属性)
    Core Animation 文档翻译—附录A(Layer样貌相关属性动画)
    Core Animation 文档翻译 (第八篇)—提高动画的性能
    Core Animation 文档翻译 (第七篇)—改变Layer的默认动画
    Core Animation 文档翻译 (第六篇)—高级动画技巧
    Core Animation 文档翻译 (第五篇)—构建Layer的层次结构
    用Markdown快速排版一片文章
    Core Animation 文档翻译 (第四篇)—让Layer的content动画起来
    Core Animation 文档翻译(第三篇)—设置Layer对象
  • 原文地址:https://www.cnblogs.com/huang-changfan/p/9911829.html
Copyright © 2011-2022 走看看