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

Java網(wǎng)絡(luò)編程從入門(mén)到精通(11):使用NetworkI

系統(tǒng) 2141 0

本文為原創(chuàng),如需轉(zhuǎn)載,請(qǐng)注明作者和出處,謝謝!

上一篇: Java網(wǎng)絡(luò)編程從入門(mén)到精通(10):Inet4Address類(lèi)和Inet6Address類(lèi)

JDK1.4 開(kāi)始, Java 提供了一個(gè) NetworkInterface 類(lèi)。這個(gè)類(lèi)可以得到本機(jī)所有的物理網(wǎng)絡(luò)接口和虛擬機(jī)等軟件利用本機(jī)的物理網(wǎng)絡(luò)接口創(chuàng)建的邏輯網(wǎng)絡(luò)接口的信息。

一、 創(chuàng)建 NetworkInterface 對(duì)象的兩個(gè)靜態(tài)方法

NetworkInerface 類(lèi)和 InetAddress 一樣,也沒(méi)有 public 的構(gòu)造方法。因此,必須通過(guò)它的兩個(gè)靜態(tài)方法來(lái)創(chuàng)建 NetworkInterface 對(duì)象。可以使用兩種方法來(lái)創(chuàng)建 NetworkInterface 對(duì)象:網(wǎng)絡(luò)接口名( getByName 方法)和 IP 地址 (getByInetAddress 方法 )

1.getByName 方法

這個(gè)方法可以通過(guò)網(wǎng)絡(luò)接口名來(lái)創(chuàng)建 NetworkInterface 對(duì)象。這個(gè)網(wǎng)絡(luò)接口名并不是計(jì)算機(jī)名,而是用于標(biāo)識(shí)物理或邏輯網(wǎng)絡(luò)接口的名字,一般是由操作系統(tǒng)設(shè)置的。網(wǎng)絡(luò)接口名在大多數(shù)操作系統(tǒng)上(包括 Windows Linux Unix )是以 eth 開(kāi)頭,后面是網(wǎng)絡(luò)接口的索引號(hào),從 0 開(kāi)始。如本機(jī)安了三塊網(wǎng)卡,那么網(wǎng)絡(luò)接口名就依次是 eth0 eth1 eth2 NetworkInterface 對(duì)象的 toString 方法可以返回網(wǎng)絡(luò)接口的名稱(chēng)、顯示名和這個(gè)網(wǎng)絡(luò)接口上綁字的所有 IP 地址等信息。當(dāng)網(wǎng)絡(luò)接口名不存在時(shí), 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

下面的代碼 是一個(gè)顯示指定網(wǎng)絡(luò)接口信息的程序,網(wǎng)絡(luò)接口名通過(guò)命令行參數(shù)傳入。

<!--<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 ) ? " 網(wǎng)絡(luò)接口不存在! " :ni);
}
}

  • 測(cè)試 1

執(zhí)行如下命令:

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

運(yùn)行結(jié)果:

<!--<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 ;
  • 測(cè)試 2

執(zhí)行如下命令:

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

運(yùn)行結(jié)果:

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

2.getByInetAddress 方法

除了可以使用網(wǎng)絡(luò)接口名來(lái)得到網(wǎng)絡(luò)接口的信息,還可以利用 getByInetAddress 方法來(lái)確定一個(gè) IP 地址屬于哪一個(gè)網(wǎng)絡(luò)接口。由于 getByInetAddress 方法必須使用一個(gè) InetAddress 對(duì)象封裝的 IP 地址來(lái)作為參數(shù),因此,在使用 getByInetAddress 方法之前,必須先創(chuàng)建一個(gè) InetAddress 對(duì)象。但要注意不能使用遠(yuǎn)程的 IP 的域名來(lái)創(chuàng)建 InetAddress 對(duì)象,否則 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

下面代碼 可以確定一個(gè) IP 地址屬于哪一個(gè)網(wǎng)絡(luò)接口,這個(gè) IP 地址通過(guò)命令行參數(shù)傳入。

<!--<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 ) ? " 本機(jī)不存在此IP地址! " :ni);
}
}

  • 測(cè)試 1

執(zhí)行如下命令:

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

運(yùn)行結(jié)果:

<!--<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 ;
  • 測(cè)試 2

執(zhí)行如下命令:

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

運(yùn)行結(jié)果:

<!--<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 ;

測(cè)試 2 使用的 IP 地址 218.61.151.22 ADSL 連接臨時(shí)分配給本機(jī)的 IP 地址,因此,運(yùn)行結(jié)果返回的 ppp0 ADSL 網(wǎng)絡(luò)接口。

二、 得到本機(jī)所有的網(wǎng)絡(luò)接口

NetworkInterface 可以通過(guò) getNetworkInterfaces 方法來(lái)枚舉本機(jī)所有的網(wǎng)絡(luò)接口。我們也可以利用 getNetworkInterfaces 得到的網(wǎng)絡(luò)接口來(lái)枚舉本機(jī)的所有 IP 地址。當(dāng)然,也可以通過(guò) InetAddress 類(lèi)的 getAllByName 來(lái)得到本機(jī)的所有 IP 地址。但 getNetworkInterfaces 方法可以按網(wǎng)絡(luò)接口將這些 IP 地址進(jìn)行分組,這對(duì)于只想得到某個(gè)網(wǎng)絡(luò)接口上的所有 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 方法得到本機(jī)所有的網(wǎng)絡(luò)接口。

<!--<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());
}
}

運(yùn)行結(jié)果(部分):

<!--<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 ;

上面的運(yùn)行結(jié)果只是一種可能的結(jié)果,讀者在運(yùn)行上面的程序 時(shí)根據(jù)本機(jī)的硬件和軟件的配置不同,運(yùn)行結(jié)果可能會(huì)有所不同。

三、 NetworkInterface 類(lèi)的 Getter 方法

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

1.getName 方法

這個(gè)方法用來(lái)得到一個(gè)網(wǎng)絡(luò)接口的名稱(chēng)。這個(gè)名稱(chēng)就是使用 getByName 方法創(chuàng)建 NetworkInterface 對(duì)象時(shí)使用的網(wǎng)絡(luò)接口名,如 eth0 ppp0 等。 getName 方法的定義如下:

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

2.getDisplayName 方法

這個(gè)方法可以得到更容易理解的網(wǎng)絡(luò)接口名,也可以將這個(gè)網(wǎng)絡(luò)接口名稱(chēng)為網(wǎng)絡(luò)接口別名。在一些操作系統(tǒng)中(如 Unix ), getDisplayName 方法和 getName 方法的返回值相同,但在 Windows getDisplayName 方法一般會(huì)返回一個(gè)更為友好的名字,如 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 類(lèi)可以通過(guò) getInetAddresse 方法以 InetAddress 對(duì)象的形式返回和網(wǎng)絡(luò)接口綁定的所有 IP 地址。 getInetAddresses 方法的定義如下:

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

上面的代碼 演示了如果使用上述三個(gè) 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. 測(cè)試

執(zhí)行如下命令:

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

運(yùn)行結(jié)果:

<!--<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網(wǎng)絡(luò)編程從入門(mén)到精通(12):使用isReachable方法探測(cè)主機(jī)是否可以連通

國(guó)內(nèi)最棒的Google Android技術(shù)社區(qū)(eoeandroid),歡迎訪問(wèn)!

《銀河系列原創(chuàng)教程》 發(fā)布

《Java Web開(kāi)發(fā)速學(xué)寶典》 出版,歡迎定購(gòu)

Java網(wǎng)絡(luò)編程從入門(mén)到精通(11):使用NetworkInterface類(lèi)獲得網(wǎng)絡(luò)接口信息


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 国产欧美另类久久久精品免费 | 99视频在线免费看 | 国产 欧美 日产中文 | 亚洲视频在线不卡 | 日韩在线不卡 | 中文字幕热久久久久久久 | 久草综合在线视频 | 久草香蕉视频在线观看 | 五月婷婷色播 | 一级毛片成人免费看免费不卡 | 国产手机在线视频放线视频 | xxxxbbbb欧美| 欧美大片天天免费看视频 | 国产二区在线播放 | 国产高清a毛片在线看 | 不卡一区二区在线 | 国产精品全国探花泡良大师 | 曰本亚洲欧洲色a在线 | 色综合啪啪 | 免费看一毛一级毛片视频 | 久久综合九九 | 老子影院午夜伦手机不四虎 | 亚洲成人在线观看视频 | 国产精品第 | 欧美综合色网 | 国产成+人+亚洲+欧美+日韩 | 欧洲a老妇女黄大片 | 免费在线黄色网址 | 欧美精品国产第一区二区 | 国产欧美日韩高清专区ho | 久久精品国产99国产精品亚洲 | 99热这里只有精品在线播放 | 欧美一二三| 中文字幕亚洲日韩无线码 | 一级毛片一级毛片一级毛片 | 国产精品1区 | 日韩中文字幕在线看 | 久久精品国产免费看久久精品 | 特黄a大片免费视频 | 久热网站| 亚洲精品123区在线观看 |