2012-10-18 39 views
5

Nếu thiết bị đề xuất kết nối được coi là người sở hữu nhóm, làm thế nào chúng ta có thể biết được địa chỉ IP của thiết bị kia? Chúng tôi có thể nhận IP của chủ sở hữu nhóm, nhưng tôi không biết cách nhận IP của chủ sở hữu không phải nhóm. Bởi vì nó không phải là thiết bị yêu cầu kết nối, nó không có lớp WifiP2pInfo. Nó thậm chí không biết IP của chủ sở hữu nhóm. Làm cách nào để gửi dữ liệu từ thiết bị này đến chủ nhóm?Cách nhận địa chỉ IP của chủ sở hữu không phải nhóm trong WiFi Direct?

Cảm ơn trước!

+0

bạn có nhận được câu trả lời ???? nếu có, xin vui lòng chia sẻ, tôi cần nó. –

Trả lời

1

Bạn có thể tìm nạp địa chỉ IP cục bộ của cả hai đồng nghiệp và so sánh chúng với IP của chủ sở hữu nhóm. Như bạn đã biết bạn có thể dễ dàng có được chủ sở hữu nhóm IP với dòng mã này:

WifiP2pInfo.info.groupOwnerAddress.getHostAddress(); 

Đối với IP địa phương bạn chỉ có thể sử dụng này:

localIp = getDottedDecimalIP(getLocalIPAddress()); 

với các phương pháp có liên quan dưới đây:

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

Cảm ơn. Tôi đã nhận các IP thông qua socket.getInetAddress() khi socket được kết nối. –

+0

không hoạt động trên Samsung galaxy grand 2 như tôi đã thử nghiệm. không thể lấy ip theo cách này. – David

Các vấn đề liên quan