sun
中国技术社区的
java api
文档是
jdk5.0
的
,
发现它的更新速度相当不及时
;
到现在也没见到
jdk6.0 api
的中文文档
;
呵呵
,
偶的英语水平不是很好
.
只好到
sun
的官方文档下载
jdk6.0
文档
(
英文的
);
jdk6.0
与
jdk5.0
的巨大变化
,
我就不多说了
,
网上多得的是
,baidu
一搜就是一大堆
.
以前想获取
MAC
或一此网络的物理特性
,
一般都要使用
jni
技术
,
通过新建一个进程
(ipconfig/all
命令
),
获取进程的数据流
,
从中再取得
Mac
地址
.
不过新的
jdk6.0
已经可以跨平台获得这些特性了
.
这里主要介绍在
java.net
包中的一些新增加的特性
.
分别打开
jdk5.0
和
jdk6.0
的文档
,
会发现新增了一个类为
java.net.InterfaceAddress,
而在类
NetworkInterface
中也新加了一些函数
:
1.“public byte[] getHardwareAddress()”
:以一个字节数组形式返回这个网络接口的硬件地址
;
2.“public int getMTU()”
:返回这个网络接口的最大传输单位
(MTU)
3.“public List<InterfaceAddress> getInterfaceAddresses()”
:返回一个
java.util.List
,它包含这个网络接口的所有接口地址
4.“public NetworkInterface getParent()”
:如果这个网络接口是一个子接口,则返回这个网络接口的父网络接口
.............
以下是我得用这两个类做的测试
,
提取本机的网络接口信息
;:
package cat.net;
import java.net.InetAddress;
import java.net.InterfaceAddress;
import java.net.NetworkInterface;
import static java.lang.System.*;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Iterator;
import java.util.List;
/**
*
* @author cattong
*/
public class NetInterfaceDemo {
/** Creates a new instance of NetInterfaceDemo */
public NetInterfaceDemo() {
}
/*
*
转化成
ip
地址
;
*/
public static String changeToIP(byte b[]){
String ip=null;
if(b.length==4)
ip=b[0]+"."+b[1]+"."+b[2]+"."+b[3];
return ip;
}
/*
*
转化成十六进制
;
*/
public static String changeToMAC(byte b[]){
String mac=null;
Byte bt=null;
if(b.length==6){
mac="";
String temp="";
int length=0;
for(int i=0;i<6;i++){
int n=b[i];
temp=Integer.toHexString(n);
length=temp.length();
if(length==1){
mac=mac+"0"+temp+"-";
}else{
//out.println(length);
mac=mac+Integer.toHexString(n).substring(length-2,length)+"-";
}
}
}
return mac;
}
public static void main(String[] args) throws SocketException, UnknownHostException {
NetworkInterface myInterface=NetworkInterface.getByInetAddress(InetAddress.getLocalHost());
out.println("
硬件地址
:"+changeToMAC(myInterface.getHardwareAddress()));
out.println("
网络接口的所有接口地址
:");
List<InterfaceAddress> list=myInterface.getInterfaceAddresses();
Iterator<InterfaceAddress> iter=list.iterator();
InetAddress inet=null;
InterfaceAddress inf=null;
while(iter.hasNext()){
inf=iter.next();
inet=inf.getAddress();
out.print(" "+changeToIP(inet.getAddress())+" "+inet.getAddress().length);
inet=inf.getBroadcast();
out.println("
广播地址
:"+changeToIP(inet.getAddress()));
}
out.println("
最大的传输单元
:"+myInterface.getMTU());
String parent=myInterface.getParent()==null?"
无
":"
有
";
out.println("
是否存在一个父接口
:"+parent);
String son=myInterface.getSubInterfaces()==null?"
无
":"
有
";
out.println("
是否存在一个子接口
:"+son);
out.println("
网络接口是否是一个
loopback
接口
:"+myInterface.isLoopback());
out.println("
网络接口是否是一个端到端的接口
:"+myInterface.isPointToPoint());
out.println("
如果这个网络接口是
'up'
并且已经
'running':"+myInterface.isUp());
out.println("
网络接口是否是一个虚拟接口
:"+myInterface.isVirtual());
out.println("
网络接口是否支持多点传送
:"+myInterface.supportsMulticast());
}
}
结果
>>>>>>>>>>>>>:
硬件地址
:00-14-85-1b-e9-8b-
网络接口的所有接口地址
:
10.5.125.31 4
广播地址
:10.5.127.-1
10.5.124.31 4
广播地址
:10.5.124.-1
最大的传输单元
:1500
是否存在一个父接口
:
无
是否存在一个子接口
:
有
网络接口是否是一个
loopback
接口
:false
网络接口是否是一个端到端的接口
:false
如果这个网络接口是
'up'
并且已经
'running':true
网络接口是否是一个虚拟接口
:false
网络接口是否支持多点传送
:true
生成成功(总时间:
2
秒)
-----------------------------------------------
不过还是有点不太明白
,
就是广播地址最后一位是数应当是
1
才对
,
而不是
-1
啊
.
以上程序在
netbeas
上测试过
,
具体的
api
可以参考
jdk6.0.
如果是
window
系统可以对测试数据是否正确
:
运行
cmd----->
输入
:
ipconfig/all+
回车