InetAddress類和SocketAddress類簡介


Java網絡應用程序中,使用java.net包中的InetAddress類表示IP地址,這個類被大多數的網絡類所引用,可同時支持IPV4和IPV6。該類用兩個字段表示一個IP地址,hostName和address,hostName包含了主機名,address包含了32位的IP地址。

InetAddress類中沒有公共的構造方法,InetAddress提供了靜態方法來返回合適的初始化的InetAddress對象。

1、public static InetAddress getByName(String host) throws UnknownHostException

在給定主機名的情況下確定主機的IP地址,主機名可以是機器名(“如java.sun.com")也可以是其IP地址的文本表示形式,如果提供IP地址,則僅檢查地址格式的有效性,如果主機為null,則返回表示回送接口地址的InetAddress。

例如:InetAddress address = InetAddress.getByName("https://www.oracle.com/");

2、public static InetAddress[] getAllByName(String host) throws UnknownHostException

在給定主機名的情況下,根據系統上配置的名稱服務返回其IP地址所組成的數組。

3、public static InetAddress getByAddress(byte[] addr)throws UnknownHostException

在給定原始IP地址的情況下,返回InetAddress對象,參數按網絡字節順序,地址的高位字節位於getAddress()[0]中。

例如:byte[] addr1 = new byte[]{127.0.0.1};

4、public static InetAddress getByAddress(String host,byte[] addr)throws UnknownHostException

根據提供的主機名和IP地址創建InetAddress,只生成一個InetAddress對象,並不檢查該主機名或域名是否合法或是否存在。

5、public static InetAddress getLocalHost() throws UnknownHostException

返回本地主機的IP地址。主機名比IP地址更穩定,通常選擇主機名。

方法:

1、getHostName()

返回一個String,該字符串包含了具有該InetAddress對象表示的IP地址的主機的名稱,如果查詢的機器沒有或被禁止查找主機名,則返回點分形式的IP地址。

例如:InetAddress machine = InetAddress.getLocalHost();

           String localhost = machine.getHostName();

2、getHostAddress()

返回一個字符串,該字符串包含了點分格式的IP地址。

例如:InetAddress me = InetAddress.getLocalHost();

           String dQ = me.getHostAddress();

3、getAddress()

返回InetAddress對象的原始IP地址,結果按網絡字節順序,地址的高位字節位於getAddress()[0]中。

Java數組下標從0開始,為了應付128位的IP地址,盡量不要假定關於數組長度的任何信息,盡管當前這樣的數組具有4個字節的長度,但是將來實現的方法可能返回具有16字節的數組,如果需要知道數組的長度,則使用數組的length字段。

例如:InetAddress me = InetAddress.getLocalHost();

           byte[] address = me.getAddress();

getAddress()返回的字節是無符號的,這回產生問題,與C語言不同,java沒有無符號字節的基本數據類型,值超過127以上的字節作為負數對待,因此,如果要使用getAddress()返回的字節做任何工作時,需要將字節改進為int並做適當的調整,下面是實現該過程的一種方法

int unsignedByte = signedByte<0? signedByte + 256:signedByte;

其他方法:

isMulticastAddress() :是否是一個組播地址。

isAnyLocalAddress():是否是一個通配地址。

isLoopbackAddress():是否是一個環回地址。

isLinkLocalAddress():判斷IP地址是否為鏈路連接地址。

 二、SocketAddress類:

在網絡程序中,經常使用套接字Socket來定位和連接某台服務器提供的某個服務,套接字實際上可以看作一個組合(IP地址+端口port)。

SocketAddress類是一個抽象類,需要由子類完成具體的功能實現。

InetSocketAddress類是SocketAddress類的直接子類,實現了IP套接字(socket)地址的封裝。

1、public InetSocketAddress(InetAddress addr,int port)

根據ip地址和端口,創建InetSocketAddress對象,如果addr設置為null,就使用通配地址。

例如:InetAddress addr = InetAddress.getByName("java.sun.com");

           int port = 80;

           SocketAddress sockaddr = new InetSocketAddress(addr,port);

2、public InetSocketAddress( int port)

根據端口創建InetSocketAddress對象,IP地址使用通配地址。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM