2016-03-01 133 views
0

我正在开发一个充当服务器的Web应用程序。在这个应用程序中,我使用ServerSocket实现了服务器应用程序和充当客户端的wi-fi设备之间的双向通信。我没有直接连接到我的服务器,我正在连接到我的路由器,哪个端口转发到我的系统,双向通信成功。我现在想要的是找到连接的Wi-fi设备的MAC地址。我已经做了一些研究,并试图获得MAC地址,但失败了。任何人都可以帮助我做到这一点。以下是我的代码的一部分。如何找到连接到插座的Wi-Fi设备的MAC地址

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

我我正在获取我的PC的MAC地址而不是Wi-Fi设备。 – Arun

回答

2

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

换句话说,无论何时使用L3协议进行通信(直到通过交叉电缆或通过L2交换机直接进行通信),它都不会被保留。

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

一些已经问关于这个主题的问题:

+0

我有一个小小的怀疑。还有其他的东西,比如每个设备独有的MAC ID,并且可以在没有客户端发送的情况下从服务器端读取。 – Arun

+0

在L3通信中,您只能获得客户端IP和TCP端口。 – rkosegi

+0

谢谢你的朋友。如您所说,我会尝试将MAC ID作为客户通信的一部分。 – Arun

相关问题