我正在开发一个充当服务器的Web应用程序。在这个应用程序中,我已经建立了ServerSocket,用于服务器应用程序和充当客户端的Wi-Fi设备之间的双向通信。我没有直接连接到我的服务器,我正在连接到我的路由器,哪个端口转发到我的系统,双向通信成功。我现在想要的只是找到连接的Wi-Fi设备的MAC地址。我做了一些研究并尝试获取MAC地址但是失败了。任何人都可以帮我解决这个问题.Below是我代码的一部分。< / p>
public class ScheduleJob extends ServletApp implements Job{
private int port = 1717;
public static String number;
String ReceivedData = "";
public void execute(JobExecutionContext context)throws JobExecutionException {
System.out.println("Starting ... ");
ServerSocket Sersocket = null;
System.out.println("Starting the socket server at port:" +port);
boolean listeningSocket = true;
try {
Sersocket = new ServerSocket(port);
System.out.println("Waiting for clients...");
} catch (IOException e) {
System.err.println("Could not listen on port: 1717");
}
try {
while (listeningSocket) {
Socket scokt = Sersocket.accept();
InetAddress MachineAdd = scokt.getInetAddress();
System.out.println("Response-----:" +MachineAdd);
InetAddress ip = InetAddress.getLocalHost();
System.out.println("current ip : "+ip);
NetworkInterface network = NetworkInterface.getByInetAddress(ip);
byte[] mac = network.getHardwareAddress();
System.out.print("Current MAC address : ");
StringBuilder sb = new StringBuilder();
for (int i = 0; i < mac.length; i++) {
sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));
}
System.out.println(sb.toString());
答案 0 :(得分:2)
MAC地址是属于layer 2 of OSI model的信息。
换句话说,只要您使用L3协议进行通信(直到您通过交叉电缆或L2交换机直接通信),它就不会被保留。
我建议您将MAC地址作为应用程序通信的一部分从客户端发送到服务器,这样当路由器进行端口转发时,它不会丢失。
关于此主题的一些已经问过的问题: