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+回车
发现它的更新速度相当不及时;到现在也没见到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+回车