5

接続を提案したデバイスがグループ所有者として指定された場合、他のデバイスの IP アドレスをどのように知ることができますか? グループ所有者の IP は取得できますが、非グループ所有者の IP を取得する方法がわかりません。接続を要求したのはデバイスではないため、WifiP2pInfo クラスがありませんでした。グループ所有者の IP さえ知りません。このデバイスからグループ所有者にデータを送信するにはどうすればよいですか?

前もって感謝します!

4

1 に答える 1

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";
    }
}
于 2012-11-14T19:22:14.420 に答える