java 获取mac地址

采用调用系统命令方式读取MAC地址:

nbtstat -a IP

设置防火墙:允许传入回显请求

允许例外:文件和打印机共享

在用process调用cmd执行命令时,出现了一个小插曲,Process.waitFor() 方法阻塞问题。

首先来解释一下 waitFor() 方法的意义, waitFor() 表示当前 Process 所在的子线程处于等待状态,如有必要,一直要等到由该 Process 对象表示的进程已经终止,网上说如果我们在调用此方法时,如果不注意的话,很容易出现主线程阻塞, Process 也挂起的情况。这就是我遇到的问题,网上的解决办法是,在调用 waitFor() 的时候, Process 需要向主线程汇报运行状况,所以要注意清空缓存区,即 InputStream 和 ErrorStream ,注意这里 InputStream 和 ErrorStream 都需要清空。

具体操作如下:

public static String checkPhysicalAddress(String IP) {
  Process process=null;
  String s="";
  try {
   process = Runtime.getRuntime().exec("cmd /c nbtstat -a "+IP);   
   InputStream stderr = process.getErrorStream();
   InputStreamReader isr = new InputStreamReader(stderr);
   BufferedReader br = new BufferedReader(isr);
   BufferedReader bufferedReader = new BufferedReader(
     new InputStreamReader(process.getInputStream()));   
   String msg = null;   
   while ((msg = bufferedReader.readLine()) != null) {
    if (msg.indexOf("MAC Address") > 1) {
     s += msg.substring(msg.indexOf("MAC Address") + 14, msg.length());
     break;
                }
   }
   while (br.readLine() != null) {
    
   }
   process.waitFor();

  } catch (Exception e) {
   e.printStackTrace();
  }
  if( process.exitValue() != 0) {
   process.destroy();
   }
  System.out.println(s);
  return s;
 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值