下面方法在main执行时才几百s,但放到struts action里面执行String ddr = request.getRemoteAddr();
String macDdr = this.getMACAddress(ddr);耗时几秒钟,不知什么原因?
/**
 * 根据IP获取Mac地址
 * @param ip
 * @return
 */
public static String getMACAddress(String ip){
String str = "";
String macAddress = "";
try {
Process p = Runtime.getRuntime().exec("nbtstat -A " + ip);
InputStreamReader ir = new InputStreamReader(p.getInputStream());
LineNumberReader input = new LineNumberReader(ir);
for (int i = 1; i < 100; i++) {
str = input.readLine();
if (str != null) {
if (str.indexOf("MAC Address") > 1) {
macAddress = str.substring(
str.indexOf("MAC Address") + 14, str.length());
break;
}
}
}
} catch (IOException e) {
e.printStackTrace(System.out);
}
return macAddress;
}

解决方案 »

  1.   

    在 JVM 中执行操作系统命令就等于在程序中开启一个操作系统进程来执行,不慢才怪了。
      

  2.   

    对方很可能不在局域网上,所以你无法获取到对方的Mac就算是同一个局域网,nbtstat命令也不是一个很快的命令。所以你的代码没有什么实际意义。
      

  3.   

    根本没有什么好办法。你先自己运行一下nbtstat -A 命令就知道它本身花费的时间了。而且我也说了,如果对方不是你局域网的,你的代码没有任何意义。
      

  4.   

    不然登陆的时候为了获取这个mac地址会被它搞慢不少