2012-10-18 4 views
5

연결을 제안한 장치가 그룹 소유 자로 지정된 경우 다른 장치의 IP 주소를 어떻게 알 수 있습니까? 우리는 그룹 소유자의 IP를 얻을 수 있지만 그룹이 아닌 소유자의 IP를 얻는 방법을 모르겠습니다. 연결을 요청한 장치가 아니기 때문에 WifiP2pInfo 클래스가 없습니다. 그것은 심지어 그룹 소유자의 IP를 모른다. 이 장치의 데이터를 그룹 소유자에게 보내려면 어떻게해야합니까?WiFi Direct에서 비 그룹 소유자의 IP 주소를 얻는 방법은 무엇입니까?

미리 감사드립니다.

+0

답변을 얻었습니까 ???? 그렇다면 공유하십시오, 필요합니다. –

답변

1

두 피어의 로컬 IP 주소를 가져 와서 그룹 소유자 IP와 비교할 수 있습니다. 당신은 이미 당신이 쉽게 코드 줄에 그룹 소유자 IP를 얻을 수 있습니다다시피 :

WifiP2pInfo.info.groupOwnerAddress.getHostAddress(); 

로컬 IP를 들어 당신은 단순히 이것을 사용할 수 있습니다 :

localIp = getDottedDecimalIP(getLocalIPAddress()); 

를 아래의 관련 방법과 :

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를 얻었습니다. –

+0

삼성 갤럭시 그랜드 2에서 작동하지 않습니다. 이 방법으로는 IP를 얻을 수 없습니다. – David