2012-10-18 10 views
5

Wenn das Gerät, das den Verbindungsaufbau vorschlug, als Gruppenbesitzer definiert wurde, wie können wir dann die IP-Adresse des anderen Geräts erkennen? Wir können die IP-Adresse des Gruppenbesitzers erhalten, aber ich weiß nicht, wie ich die IP-Adresse des Nicht-Gruppeninhabers erhalten soll. Da es nicht das Gerät war, das eine Verbindung herstellen wollte, war die WifiP2pInfo-Klasse nicht vorhanden. Es kennt sogar die IP des Gruppenbesitzers nicht. Wie kann ich Daten von diesem Gerät an den Gruppenbesitzer senden?Wie bekomme ich die IP-Adresse eines Nicht-Gruppenbesitzers in WiFi Direct?

Vielen Dank im Voraus!

+0

hast du die Antwort ???? Wenn ja, bitte teilen, ich brauche es. –

Antwort

1

Sie können lokale IP-Adressen beider Peers abrufen und diese dann mit der IP des Gruppeneigentümers vergleichen. Wie Sie bereits wissen können Sie bequem Gruppeneigentümer IP mit dieser Codezeile bekommen:

WifiP2pInfo.info.groupOwnerAddress.getHostAddress(); 

Für die lokale IP können Sie einfach verwenden:

localIp = getDottedDecimalIP(getLocalIPAddress()); 

mit den dazugehörigen Methoden unter:

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

Danke. Ich bekam die IPs durch socket.getInetAddress(), als der Socket verbunden war. –

+0

funktioniert nicht auf Samsung Galaxy Grand 2, wie ich getestet habe. kann nicht auf diese Weise IP bekommen. – David