亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Java網絡編程從入門到精通(11):使用NetworkI

系統 1935 0

本文為原創,如需轉載,請注明作者和出處,謝謝!

上一篇: Java網絡編程從入門到精通(10):Inet4Address類和Inet6Address類

JDK1.4 開始, Java 提供了一個 NetworkInterface 類。這個類可以得到本機所有的物理網絡接口和虛擬機等軟件利用本機的物理網絡接口創建的邏輯網絡接口的信息。

一、 創建 NetworkInterface 對象的兩個靜態方法

NetworkInerface 類和 InetAddress 一樣,也沒有 public 的構造方法。因此,必須通過它的兩個靜態方法來創建 NetworkInterface 對象。可以使用兩種方法來創建 NetworkInterface 對象:網絡接口名( getByName 方法)和 IP 地址 (getByInetAddress 方法 )

1.getByName 方法

這個方法可以通過網絡接口名來創建 NetworkInterface 對象。這個網絡接口名并不是計算機名,而是用于標識物理或邏輯網絡接口的名字,一般是由操作系統設置的。網絡接口名在大多數操作系統上(包括 Windows Linux Unix )是以 eth 開頭,后面是網絡接口的索引號,從 0 開始。如本機安了三塊網卡,那么網絡接口名就依次是 eth0 eth1 eth2 NetworkInterface 對象的 toString 方法可以返回網絡接口的名稱、顯示名和這個網絡接口上綁字的所有 IP 地址等信息。當網絡接口名不存在時, getByName 返回 null getByName 方法定義如下:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> public static NetworkInterfacegetByName(Stringname) throws SocketException

下面的代碼 是一個顯示指定網絡接口信息的程序,網絡接口名通過命令行參數傳入。

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> package mynet;

import java.net. * ;

public class MyNetworkInterface1
{
public static void main(String[]args) throws Exception
{
if (args.length == 0 )
return ;
NetworkInterfaceni
= NetworkInterface.getByName(args[ 0 ]);
System.out.println((ni
== null ) ? " 網絡接口不存在! " :ni);
}
}

  • 測試 1

執行如下命令:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> javamynet.MyNetworkInterface1eth0

運行結果:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> name:eth0(RealtekRTL8139FamilyPCIFastEthernetNIC)index: 4 addresses:
/
192.168.18.10 ;
/ 192.168.18.20 ;
  • 測試 2

執行如下命令:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> javamynet.MyNetworkInterface1abcd

運行結果:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> 網絡接口不存在!

2.getByInetAddress 方法

除了可以使用網絡接口名來得到網絡接口的信息,還可以利用 getByInetAddress 方法來確定一個 IP 地址屬于哪一個網絡接口。由于 getByInetAddress 方法必須使用一個 InetAddress 對象封裝的 IP 地址來作為參數,因此,在使用 getByInetAddress 方法之前,必須先創建一個 InetAddress 對象。但要注意不能使用遠程的 IP 的域名來創建 InetAddress 對象,否則 getByInetAddress 將返回 null getByInetAddress 方法的定義如下:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> public static NetworkInterfacegetByInetAddress(InetAddressaddr) throws SocketException

下面代碼 可以確定一個 IP 地址屬于哪一個網絡接口,這個 IP 地址通過命令行參數傳入。

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> package mynet;

import java.net. * ;

public class MyNetworkInterface2
{

public static void main(String[]args) throws Exception
{
if (args.length == 0 ) return ;
InetAddresslocal
= InetAddress.getByName(args[ 0 ]);
NetworkInterfaceni
= NetworkInterface.getByInetAddress(local);
System.out.println((ni
== null ) ? " 本機不存在此IP地址! " :ni);
}
}

  • 測試 1

執行如下命令:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> javamynet.MyNetworkInterface2 127.0 . 0.1

運行結果:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> name:lo(MSTCPLoopbackinterface)index: 1 addresses:
/
127.0.0.1 ;
/ 0 : 0 : 0 : 0 : 0 : 0 : 0 : 1 ;
  • 測試 2

執行如下命令:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> javamynet.MyNetworkInterface2 218.61.151.22

運行結果:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> name:ppp0(WAN(PPP/SLIP)Interface)index: 0 addresses:
/
218.61.151.22 ;

測試 2 使用的 IP 地址 218.61.151.22 ADSL 連接臨時分配給本機的 IP 地址,因此,運行結果返回的 ppp0 ADSL 網絡接口。

二、 得到本機所有的網絡接口

NetworkInterface 可以通過 getNetworkInterfaces 方法來枚舉本機所有的網絡接口。我們也可以利用 getNetworkInterfaces 得到的網絡接口來枚舉本機的所有 IP 地址。當然,也可以通過 InetAddress 類的 getAllByName 來得到本機的所有 IP 地址。但 getNetworkInterfaces 方法可以按網絡接口將這些 IP 地址進行分組,這對于只想得到某個網絡接口上的所有 IP 地址是非常有用的。 getNetworkInterfaces 方法的定義如下:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> public static Enumeration < NetworkInterface > getNetworkInterfaces() throws SocketException

下面代碼 演示了如何使用 getNetworkInterfaces 方法得到本機所有的網絡接口。

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> package mynet;

import java.net. * ;
import java.util. * ;

public class MyNetworkInterface3
{
public static void main(String[]args) throws Exception
{
Enumeration
< NetworkInterface > nis = NetworkInterface.getNetworkInterfaces();
while (nis.hasMoreElements())
System.out.println(nis.nextElement());
}
}

運行結果(部分):

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> name:lo(MSTCPLoopbackinterface)index: 1 addresses:
/
127.0.0.1 ;
/ 0 : 0 : 0 : 0 : 0 : 0 : 0 : 1 ;
name:eth0(RealtekRTL8139FamilyPCIFastEthernetNIC)index: 4 addresses:
/
192.168.18.10 ;
/ 192.168.18.20 ;
name:ppp0(WAN(PPP/SLIP)Interface)index: 0 addresses:
/
218.61.151.22 ;

上面的運行結果只是一種可能的結果,讀者在運行上面的程序 時根據本機的硬件和軟件的配置不同,運行結果可能會有所不同。

三、 NetworkInterface 類的 Getter 方法

NetworkInterface 類提供了三個方法可以分別得到網絡接口名 (getName 方法 ) 、網絡接口別名 (getDisplayName 方法 ) 以及和網絡接口綁定的所有 IP 地址 (getInetAddresses 方法 )

1.getName 方法

這個方法用來得到一個網絡接口的名稱。這個名稱就是使用 getByName 方法創建 NetworkInterface 對象時使用的網絡接口名,如 eth0 ppp0 等。 getName 方法的定義如下:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> public StringgetName()

2.getDisplayName 方法

這個方法可以得到更容易理解的網絡接口名,也可以將這個網絡接口名稱為網絡接口別名。在一些操作系統中(如 Unix ), getDisplayName 方法和 getName 方法的返回值相同,但在 Windows getDisplayName 方法一般會返回一個更為友好的名字,如 Realtek RTL8139 Family PCI Fast Ethernet NIC getDisplayName 方法的定義如下:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> public StringgetDisplayName()

3.getInetAddresses 方法

NetworkInterface 類可以通過 getInetAddresse 方法以 InetAddress 對象的形式返回和網絡接口綁定的所有 IP 地址。 getInetAddresses 方法的定義如下:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> public Enumeration < InetAddress > getInetAddresses()

上面的代碼 演示了如果使用上述三個 Getter 方法。

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> package mynet;

import java.net. * ;
import java.util. * ;

public class MyNetworkInterface4
{
public static void main(String[]args) throws Exception
{
if (args.length == 0 )
return ;
NetworkInterfaceni
= NetworkInterface.getByName(args[ 0 ]);
System.out.println(
" Name: " + ni.getName());
System.out.println(
" DisplayName: " + ni.getDisplayName());
Enumeration
< InetAddress > addresses = ni.getInetAddresses();
while (addresses.hasMoreElements())
System.out.println(addresses.nextElement().getHostAddress());
}
}

1. 測試

執行如下命令:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> javamynet.MyNetworkInterface4eth0

運行結果:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> Name:eth0
DisplayName:RealtekRTL8139FamilyPCIFastEthernetNIC
192.168.18.10
192.168.18.20

下一篇: Java網絡編程從入門到精通(12):使用isReachable方法探測主機是否可以連通

國內最棒的Google Android技術社區(eoeandroid),歡迎訪問!

《銀河系列原創教程》 發布

《Java Web開發速學寶典》 出版,歡迎定購

Java網絡編程從入門到精通(11):使用NetworkInterface類獲得網絡接口信息


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲 自拍 另类 制服在线 | 天天婷婷| 国产凹凸在线一区二区色老头 | 高清国产一区二区三区 | 日本大蕉香蕉大视频在线观看 | 色婷婷综合欧美成人 | 欧美高清在线精品一区二区不卡 | 亚洲天码中文字幕第一页 | 亚洲欧美在线综合一区二区三区 | 免费在线观看黄色毛片 | 成人毛片免费看 | 色婷婷久| 99精品视频在线这里只有 | 久久免费精品 | 国产一区二区免费福利片 | 欧日韩不卡在线视频 | 在线观看www成人影院 | 国产福利在线免费 | 亚洲综合日韩在线亚洲欧美专区 | 黑人边吃奶边扎下面激情视频 | 久久综合九色综合精品 | 奇米影视777第四色 奇米影视777狠狠狠888不卡 | 欧美成人看片一区二区三区 | 日本不卡一| 中文一区 | 中文字幕一区日韩在线视频 | 狠狠色狠狠色综合 | 亚洲九九色 | 欧美手机手机在线视频一区 | 青青久久久国产线免观 | 精品国产精品国产 | 日本精品久久久中文字幕 | 色综合久久一本首久久 | 123日本不卡在线观看 | 国产精品日韩欧美 | 亚洲国产精品二区久久 | 日本一区二区三区四区 | 免费超爽大片黄网站 | 免费观看91视频 | 国产图片综合区 | 精品国产品国语在线不卡丶 |