溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java 中怎么利用Socket編程識(shí)別網(wǎng)絡(luò)主機(jī)

發(fā)布時(shí)間:2021-08-10 16:20:13 來(lái)源:億速云 閱讀:162 作者:Leah 欄目:編程語(yǔ)言

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)Java 中怎么利用Socket編程識(shí)別網(wǎng)絡(luò)主機(jī),文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

獲取主機(jī)地址信息

在Java中我們使用InetAddress類來(lái)代表目標(biāo)網(wǎng)絡(luò)地址,包括主機(jī)名和數(shù)字類型的地址信息,并且InetAddress的實(shí)例是不可變的,每個(gè)實(shí)例始終指向一個(gè)地址。InetAddress類包含兩個(gè)子類,分別對(duì)應(yīng)兩個(gè)IP地址的版本:

  • Inet4Address

  • Inet6Address

我們通過(guò)前面的筆記可以知道:IP地址實(shí)際上是分配給主機(jī)與網(wǎng)絡(luò)之間的連接,而不是主機(jī)本身,NetworkInterface類提供了訪問(wèn)主機(jī)所有接口的信息的功能。下面我們通過(guò)一個(gè)簡(jiǎn)單的示例程序來(lái)學(xué)習(xí)如何獲取網(wǎng)絡(luò)主機(jī)的地址信息:

import java.net.*;   import java.util.Enumeration;      public class InetAddressExample {          /**        * @param args   */      public static void main(String[] args) {           // TODO Auto-generated method stub           try {               // 獲取主機(jī)網(wǎng)絡(luò)接口列表               Enumeration<NetworkInterface> interfaceList = NetworkInterface                       .getNetworkInterfaces();               // 檢測(cè)接口列表是否為空,即使主機(jī)沒(méi)有任何其他網(wǎng)絡(luò)連接,回環(huán)接口(loopback)也應(yīng)該是存在的               if (interfaceList == null) {                   System.out.println("--沒(méi)有發(fā)現(xiàn)接口--");               } else {                   while (interfaceList.hasMoreElements()) {                       // 獲取并打印每個(gè)接口的地址                       NetworkInterface iface = interfaceList.nextElement();                       // 打印接口名稱                       System.out.println("Interface" + iface.getName() + ";");                       // 獲取與接口相關(guān)聯(lián)的地址                       Enumeration<InetAddress> addressList = iface                               .getInetAddresses();                       // 是否為空                       if (!addressList.hasMoreElements()) {                           System.out.println("\t(沒(méi)有這個(gè)接口相關(guān)的地址)");                       }                       // 列表的迭代,打印出每個(gè)地址                       while (addressList.hasMoreElements()) {                           InetAddress address = addressList.nextElement();                           System.out                                   .print("\tAddress"                                          + ((address instanceof Inet4Address ? "(v4)"                                                  : address instanceof Inet6Address ? "v6"                                                          : "(?)")));                           System.out.println(":" + address.getHostAddress());                       }                   }               }           } catch (SocketException se) {               System.out.println("獲取網(wǎng)絡(luò)接口錯(cuò)誤:" + se.getMessage());           }           // 獲取從命令行輸入的每個(gè)參數(shù)所對(duì)應(yīng)的主機(jī)名和地址,迭代列表并打印           for (String host : args) {               try {                   System.out.println(host + ":");                   InetAddress[] addressList = InetAddress.getAllByName(host);                   for (InetAddress address : addressList) {                       System.out.println("\t" + address.getHostName() + "/"                              + address.getHostAddress());                   }               } catch (UnknownHostException e) {                   System.out.println("\t無(wú)法找到地址:" + host);               }           }          }   }

查看運(yùn)行效果:

Java 中怎么利用Socket編程識(shí)別網(wǎng)絡(luò)主機(jī)

上述就是小編為大家分享的Java 中怎么利用Socket編程識(shí)別網(wǎng)絡(luò)主機(jī)了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI