如何获取WiFi Direct中非群组所有者的IP地址?

时间:2012-10-18 03:05:52

标签: ip wifi android-wifi wifi-direct

如果建议连接的设备被指定为组拥有者,我们如何知道其他设备的IP地址?我们可以获得组所有者的IP,但我不知道如何获得非组所有者的IP。因为不是要求连接的设备,它没有WifiP2pInfo类。它甚至不知道集团所有者的IP。如何将数据从此设备发送给组所有者?

提前致谢!

1 个答案:

答案 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";
    }
}