2012-10-18 64 views
5

如果建議連接的設備作爲組擁有者,我們如何知道其他設備的IP地址?我們可以獲得集團所有者的IP,但我不知道如何獲得非集團所有者的IP。因爲它不是要求連接的設備,所以它沒有WifiP2pInfo類。它甚至不知道集團所有者的知識產權。我怎樣才能從這個設備發送數據給組所有者?如何在WiFi Direct中獲取非羣組所有者的IP地址?

在此先感謝!

+0

你得到答案嗎?如果是的話,請分享,我需要它。 –

回答

1

您可以獲取兩個對等體的本地IP地址,並將它們與組擁有者IP進行比較。正如你可能已經知道了,你可以很容易地得到羣組所有者IP與這行代碼:與下面的相關方法

localIp = getDottedDecimalIP(getLocalIPAddress()); 

WifiP2pInfo.info.groupOwnerAddress.getHostAddress(); 

對於本地IP,你可以簡單地使用這個

private byte[] getLocalIPAddress() { 
    try { 
     for (Enumeration<NetworkInterface> en = NetworkInterface 
       .getNetworkInterfaces(); en.hasMoreElements();) { 
      NetworkInterface intf = en.nextElement(); 
      for (Enumeration<InetAddress> enumIpAddr = intf 
        .getInetAddresses(); enumIpAddr.hasMoreElements();) { 
       InetAddress inetAddress = enumIpAddr.nextElement(); 
       if (!inetAddress.isLoopbackAddress()) { 
        if (inetAddress instanceof Inet4Address) { 
         return inetAddress.getAddress(); 
        } 
       } 
      } 
     } 
    } catch (SocketException ex) { 
     // Log.e("AndroidNetworkAddressFactory", "getLocalIPAddress()", ex); 
    } catch (NullPointerException ex) { 
     // Log.e("AndroidNetworkAddressFactory", "getLocalIPAddress()", ex); 
    } 
    return null; 
} 

private String getDottedDecimalIP(byte[] ipAddr) { 
    if (ipAddr != null) { 
     String ipAddrStr = ""; 
     for (int i = 0; i < ipAddr.length; i++) { 
      if (i > 0) { 
       ipAddrStr += "."; 
      } 
      ipAddrStr += ipAddr[i] & 0xFF; 
     } 
     return ipAddrStr; 
    } else { 
     return "null"; 
    } 
} 
+1

謝謝。當套接字連接時,我通過socket.getInetAddress()獲得了IP。在我測試過的三星galaxy grand 2上不能使用 –

+0

。無法通過這種方式獲得IP。 – David