2012-10-18 12 views
5

Jeśli urządzenie, które zaproponowało połączenie, zostało zaprojektowane jako należące do grupy, skąd możemy znać adres IP innego urządzenia? Możemy uzyskać adres IP właściciela grupy, ale nie wiem, jak uzyskać adres IP właściciela grupy. Ponieważ urządzenie nie poprosiło o połączenie, nie miało ono klasy WifiP2pInfo. Nawet nie zna adresu IP właściciela grupy. Jak mogę wysłać dane z tego urządzenia do właściciela grupy?Jak uzyskać adres IP właściciela niebędącego grupą w trybie WiFi Direct?

Z góry dzięki!

+0

czy otrzymałeś odpowiedź ???? jeśli tak, proszę, udostępnij, potrzebuję tego. –

Odpowiedz

1

Można pobierać lokalne adresy IP obu równorzędnych użytkowników i porównywać je z IP właściciela grupy. Jak być może wiesz już, można łatwo dostać właściciel grupy IP z tej linii kodu:

WifiP2pInfo.info.groupOwnerAddress.getHostAddress(); 

dla lokalnego adresu IP można po prostu użyć tego:

localIp = getDottedDecimalIP(getLocalIPAddress()); 

z odpowiednich metod poniżej:

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

Dzięki. Dostałem adresy IP przez socket.getInetAddress(), gdy gniazdo było podłączone. –

+0

nie działa na Samsung galaxy grand 2 jak testowałem. nie można uzyskać IP w ten sposób. – David

Powiązane problemy