2012-12-11 89 views
1

以下程序旨在打印我節點的MAC地址。但它打印一個空白。我檢查它爲空,但它不是null。爲什麼我會得到一個空白的MAC地址?我犯了什麼錯誤?爲什麼我會得到一個空白的MAC地址?

import java.net.InetAddress; 
import java.net.NetworkInterface; 

class Tester { 
public static void main(String args[]) { 
    try { 
     InetAddress address = InetAddress.getByName("localhost"); 
     NetworkInterface ni = NetworkInterface.getByInetAddress(address); 
     byte mac[] = ni.getHardwareAddress(); 
     if(mac == null) { 
     System.out.println("Mac address is null"); 
     } else { 
     System.out.println("Else block!"); 
     String macAdd = new String(mac); 
     System.out.println(macAdd); 
     } 

    } catch(Exception exc) { 
     exc.printStackTrace(); 
    } 
} 
} 

注:mac == null是假的。

回答

2

我從來沒有見過帶有MAC地址的localhost環回接口。我懷疑這不是很有用。

System.out.println(Arrays.toString(mac)); 

打印

[] 

這並不奇怪,因爲其唯一的虛擬軟件設備。

+0

如果我用我的網絡IP 192.168.43.187替換'localhost',我可以看到:'p±íí▀⌡'這是什麼? – saplingPro

+0

它的你的mac地址變成了字符。如果您知道這些字符的ascii代碼,則可以計算出mac地址,或者如果您想查看數字,可以按照我的建議進行打印。 ;) –

0

如果您檢查用於Java 7的JavaDocs,您會注意到getLocalhost()這是您可能想要的。

1

您應該通過InetAddress.getLocalHost();而不是InetAddress.getByName("localhost");獲得本地主機。請參考下面的示例以解決您的問題。

import java.net.InetAddress; 
import java.net.NetworkInterface; 

public class Tester { 
    public static void main(String args[]) { 
     try { 
      InetAddress address = InetAddress.getLocalHost(); 
      NetworkInterface ni = NetworkInterface.getByInetAddress(address); 
      byte mac[] = ni.getHardwareAddress(); 
      if (mac == null) { 
       System.out.println("Mac address is null"); 
      } else { 
       System.out.println("Else block!"); 
       StringBuilder sb = new StringBuilder(); 
       for (int i = 0; i < mac.length; i++) { 
        sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));   
       } 
       String macAdd = new String(sb); 
       System.out.println(macAdd); 
      } 

     } catch (Exception exc) { 
      exc.printStackTrace(); 
     } 
    } 
} 

輸出

Else block! 
44-87-FC-F1-D4-77 

注: -

記住它轉換收到成可讀的十六進制格式的MAC地址是非常重要的,所以我寫了下面的代碼塊。如果你不這樣做,那麼你會收到垃圾文本爲D‡üñÔw

  StringBuilder sb = new StringBuilder(); 
      for (int i = 0; i < mac.length; i++) { 
       sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));   
      } 
      String macAdd = new String(sb); 
+0

可以請你解釋一下步驟'String.format(「%02X%s」,mac [i],(i saplingPro

+0

這叫做將接收到的MAC地址格式化爲可讀的HEX格式,如果你不這樣做,那麼你的輸出將是'D‡üñÔw'。 –

+0

請參閱我更新的答案 –

4

this discussion「嗯,這反應的界面爲‘localhost’通常是迴環設備,它不具有MAC地址,所以這可能是你的理由。」

0

MAC地址是一個字節數組,其中第一個可能爲零。

要打印它,您需要將其轉換爲可打印的字母數字(例如十六進制)格式,例如使用String.format(如Bhavik Ambani's answer中所示)。

相關問題