如何查找连接到套接字的Wi-Fi设备的MAC地址

时间:2016-03-01 05:56:25

标签: java sockets

我正在开发一个充当服务器的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());

1 个答案:

答案 0 :(得分:2)

MAC地址是属于layer 2 of OSI model的信息。

换句话说,只要您使用L3协议进行通信(直到您通过交叉电缆或L2交换机直接通信),它就不会被保留。

我建议您将MAC地址作为应用程序通信的一部分从客户端发送到服务器,这样当路由器进行端口转发时,它不会丢失。

关于此主题的一些已经问过的问题: