Java編程中應用InetAddress類肯定特別IP地址的辦法。本站提示廣大學習愛好者:(Java編程中應用InetAddress類肯定特別IP地址的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是Java編程中應用InetAddress類肯定特別IP地址的辦法正文
InetAddress類
InetAddress類用來封裝我們後面評論辯論的數字式的IP地址和該地址的域名。
你經由過程一個IP主機名與這個類產生感化,IP主機名比它的IP地址用起來更輕便更輕易懂得。
InetAddress類外部隱蔽了地址數字。
InetAddress類中的工場辦法
InetAddress類沒有顯著的結構函數。為生成一個InetAddress對象,必需應用一個可用的工場辦法。
工場辦法(factory method)僅是一個類中靜態辦法前往一個該類實例的商定。
關於InetAddress,三個辦法:getLocalHost()、getByName()和getAllByName()可以用來創立InetAddress的實例。
getLocalHost()僅前往意味當地主機的InetAddress對象。
本機地址還為localhost,127.0.0.1,這三個地址都是一回事。
getByName()辦法前往一個傳給它的主機名的InetAddress。
假如這些辦法不克不及解析主機名,它們激發一個UnknownHostException異常。
在Internet上,用一個稱號來代表多個機械是常有的事。
getAllByName()工場辦法前往代表由一個特別稱號分化的一切地址的InetAddresses類數組。
在不克不及把稱號分化成至多一個地址時,它將激發一個UnknownHostException異常。
法式實例
InetAddressTest01
package com.example.network; import java.net.InetAddress; public class InetAddressTest01 { public static void main(String[] args) throws Exception { InetAddress address = InetAddress.getLocalHost(); System.out.println(address); // 輸入:機械名/IP地址 // 如username-PC/10.4.16.131 // 經由過程域名獲得IP地址 address = InetAddress.getByName("www.sohu.com"); System.out.println(address); // 輸入:域名/IP地址 } }
應用InetAddress類肯定特別IP地址
IP地址分為通俗地址和特別地址。在後面的文章中所應用的年夜多半都是通俗的IP地址,在本文中將引見若何應用InetAddress類供給的十個辦法來肯定一個IP地址能否是一個特別的IP地址。
1、isAnyLocalAddress辦法
當IP地址是通配符地址時前往true,不然前往false.這個通配符地址關於具有多個收集接口(如兩塊網卡)的盤算機異常具有。應用通配符地址可以許可在辦事器主機接收來自任何收集接口的客戶端銜接。IPv4的通配符地址是0.0.0.0.IPv6的通配符地址是0:0:0:0:0:0:0:0,也能夠簡寫成::。
2、isLoopbackAddress辦法
當IP地址是loopback地址時前往true,不然前往false.loopback地址就是代表本機的IP地址。IPv4的loopback地址的規模是127.0.0.0 ~ 127.255.255.255,也就是說,只需第一個字節是127,就是lookback地址。如127.1.2.3、127.0.200.200都是loopback地址。IPv6的loopback地址是0:0:0:0:0:0:0:1,也能夠簡寫成::1.我們可使用ping敕令來測試lookback地址。以下面的敕令行所示:
ping 127.200.200.200
運轉成果:
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128 (注:win7下是127.200.200.200) Reply from 127.0.0.1: bytes=32 time<1ms TTL=128 Reply from 127.0.0.1: bytes=32 time<1ms TTL=128 Reply from 127.0.0.1: bytes=32 time<1ms TTL=128 Ping statistics for 127.200.200.200: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 0ms, Average = 0ms
固然127.255.255.255也是loopback地址,但127.255.255.255在Windows下是沒法ping通的。這是由於127.255.255.255是播送地址,在Windows下對發給播送地址的要求不做任何呼應,而在其他操作體系上依據設置的分歧,能夠會獲得分歧的成果。
3、isLinkLocalAddress辦法
當IP地址是當地銜接地址(LinkLocalAddress)時前往true,不然前往false.IPv4的當地銜接地址的規模是169.254.0.0 ~ 169.254.255.255.IPv6的當地銜接地址的前12位是FE8,其他的位可所以隨意率性取值,如FE88::、FE80::ABCD::都是當地銜接地址。
4、isSiteLocalAddress辦法
當IP地址是地域當地地址(SiteLocalAddress)時前往true,不然前往false.IPv4的地址當地地址分為三段:10.0.0.0 ~ 10.255.255.255、172.16.0.0 ~ 172.31.255.255、192.168.0.0 ~ 192.168.255.255.IPv6的地域當地地址的前12位是FEC,其他的位可所以隨意率性取值,如FED0::、FEF1::都是地域當地地址。
5、isMulticastAddress辦法
當IP地址是播送地址(MulticastAddress)時前往true,不然前往false.經由過程播送地址可以向收集中的一切盤算機發送信息,而不是只向一台特定的盤算機發送信息。IPv4的播送地址的規模是224.0.0.0 ~ 239.255.255.255.IPv6的播送地址第一個字節是FF,其他的字節可所以隨意率性值。關於播送地址的具體內容將在今後的章節中評論辯論。
6、isMCGlobal辦法
當IP地址是全球規模的播送地址時前往true,不然前往false.全球規模的播送地址可以向Internet中的一切的盤算機發送信息。IPv4的播送地址除224.0.0.0和第一個字節是239的IP地址都是全球規模的播送地址。IPv6的全球規模的播送地址中第一個字節是FF,第二個字節的規模是0E ~ FE,其他的字節可所以隨意率性值,如FFBE::、FF0E::都是全球規模的播送地址。
7、isMCLinkLocal辦法
當IP地址是子網播送地址時前往true,不然前往false.應用子網的播送地址只能向子網內的盤算機發送信息。IPv4的子網播送地址的規模是224.0.0.0 ~ 224.0.0.255.IPv6的子網播送地址的第一個字節是FF,第二個字節的規模是02 ~ F2,其他的字節可所以隨意率性值,如FFB2::、FF02:ABCD::都是子網播送地址。
8、isMCNodeLocal辦法
當IP地址是當地接口播送地址時前往true,不然前往false.當地接口播送地址不克不及將播送信息發送到發生播送信息的收集接口,即便是統一台盤算機的另外一個收集接口也不可。一切的IPv4播送地址都不是當地接口播送地址。IPv6的當地接口播送地址的第一個字節是FF,第二個節字的規模是01 ~ F1,其他的字節可所以隨意率性值,如FFB1::、FF01:A123::都是當地接口播送地址。
9、isMCOrgLocal辦法
當IP地址是組織規模的播送地址時前往ture,不然前往false.應用組織規模播送地址可以向公司或企業外部的一切的盤算機發送播送信息。IPv4的組織規模播送地址的第一個字節是239,第二個字節不小於192,第三個字節不年夜於195,如239.193.100.200、239.192.195.0都是組織規模播送地址。IPv6的組織規模播送地址的第一個字節是FF,第二個字節的規模是08 ~ F8,其他的字節可所以隨意率性值,如FF08::、FF48::都是組織規模的播送地址。
10、isMCSiteLocal辦法
當IP地址是站點規模的播送地址時前往true,不然前往false.應用站點規模的播送地址,可以向站點規模內的盤算機發送播送信息。IPv4的站點規模播送地址的規模是239.255.0.0 ~ 239.255.255.255,如239.255.1.1、239.255.0.0都是站點規模的播送地址。IPv6的站點規模播送地址的第一個字節是FF,第二個字節的規模是05 ~ F5,其他的字節可所以隨意率性值,如FF05::、FF45::都是站點規模的播送地址。
上面的代碼可以肯定一個IP地址能否在上述十種地址類型的規模內:
package test; import java.net.*; import java.lang.reflect.*; public class MyNet { public static void main(String[] args) throws Exception { if (args.length == 0) return; InetAddress address = InetAddress.getByName(args[0]); Method methods[] = InetAddress.class.getMethods(); // 以is開首而且沒有參數的辦法 for (Method method : methods) { if (method.getName().matches("is.*") && method.getParameterTypes().length == 0) { if (Boolean.parseBoolean(method.invoke(address).toString())) System.out.println(method.getName() + " = true"); } } } }
測試1
履行以下敕令:
java test.MyNet 224.0.0.1
運轉成果:
isMCLinkLocal = true isMulticastAddress = true
測試2
履行以下敕令:
java test.MyNet FFB1::
運轉成果:
isMCNodeLocal = true isMulticastAddress = true