Java 为什么我会得到一个空白的MAC地址?
以下程序用于打印我的节点的MAC地址。但它打印的是空白。我检查了它是否为空,但它不是空的。为什么我会得到一个空白的MAC地址?我犯了什么错误Java 为什么我会得到一个空白的MAC地址?,java,networking,mac-address,Java,Networking,Mac Address,以下程序用于打印我的节点的MAC地址。但它打印的是空白。我检查了它是否为空,但它不是空的。为什么我会得到一个空白的MAC地址?我犯了什么错误 import java.net.InetAddress; import java.net.NetworkInterface; class Tester { public static void main(String args[]) { try { InetAddress address = InetAddress.getByName
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
为假。我从未见过带有mac地址的localhost
环回接口。我怀疑这不是很有用
System.out.println(Arrays.toString(mac));
印刷品
[]
这并不奇怪,因为它只是一个虚拟软件设备。我从未见过带有MAC地址的
localhost
环回接口。我怀疑这不是很有用
System.out.println(Arrays.toString(mac));
印刷品
[]
这并不奇怪,因为它只是一个虚拟软件设备。如果你检查Java 7,你会注意到有
getLocalhost()
,这可能是你想要的。如果你检查Java 7,你会注意到有getLocalhost()
这可能是您想要的。您应该通过InetAddress.getLocalHost()获取localhost
而不是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();
}
}
}
注意:-
请记住,将接收到的mac地址转换为可读的十六进制格式非常重要,因此我编写了以下代码块。如果您不这样做,那么您将收到垃圾文本作为D-üñ212w
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);
StringBuilder sb=新建StringBuilder();
for(int i=0;i
您应该通过InetAddress.getLocalHost()获取localhost
而不是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();
}
}
}
注意:-
请记住,将接收到的mac地址转换为可读的十六进制格式非常重要,因此我编写了以下代码块。如果您不这样做,那么您将收到垃圾文本作为D-üñ212w
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);
StringBuilder sb=新建StringBuilder();
for(int i=0;i 根据“嗯,对“localhost”作出反应的接口通常是环回设备,它没有MAC地址,所以这可能是你的原因。”根据“嗯,对“localhost”作出反应的接口通常是环回设备,它没有MAC地址,所以这可能是你的原因。”MAC地址是一个字节数组,第一个字节可以是零
要打印它,您需要将其转换为可打印的字母数字(例如十六进制)格式,例如使用String.format,如所示。MAC地址是一个字节数组,第一个字节可能为零
要打印它,您需要将其转换为可打印的字母数字(例如十六进制)格式,例如使用中所示的String.format。如果我将localhost
替换为我的网络IP192.168.43.187
我会看到这一点:p±▀⌡代码>它是什么?它是由你的mac地址变成的字符。如果你知道这些字符的ascii码,你可以算出mac地址,或者你可以按照我建议的方式打印出来,如果你想看到数字的话如果我用我的网络IP替换localhost
,192.168.43.187
我会看到这个:p±▀⌡代码>它是什么?它是由你的mac地址变成的字符。如果你知道这些字符的ascii码,你可以算出mac地址,或者你可以按照我建议的方式打印出来,如果你想看到数字的话你能给我解释一下这个步骤吗?“-”:“)
这是用来将你收到的mac地址格式化成可读的十六进制格式,如果你不这样做,你的输出就会是那样的Düñ212w
。你能给我解释一下这个步骤吗String.format(%02X%s),mac[i],(i
调用此函数将接收到的mac地址格式化为可读的十六进制格式,如果不这样做,则输出将是Düñ212w
。