1. 程式人生 > >7.1(java學習筆記)InetAddress&InetScoketAddress

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