接続を提案したデバイスがグループ所有者として指定された場合、他のデバイスの IP アドレスをどのように知ることができますか? グループ所有者の IP は取得できますが、非グループ所有者の IP を取得する方法がわかりません。接続を要求したのはデバイスではないため、WifiP2pInfo クラスがありませんでした。グループ所有者の IP さえ知りません。このデバイスからグループ所有者にデータを送信するにはどうすればよいですか?
前もって感謝します!
接続を提案したデバイスがグループ所有者として指定された場合、他のデバイスの IP アドレスをどのように知ることができますか? グループ所有者の IP は取得できますが、非グループ所有者の IP を取得する方法がわかりません。接続を要求したのはデバイスではないため、WifiP2pInfo クラスがありませんでした。グループ所有者の IP さえ知りません。このデバイスからグループ所有者にデータを送信するにはどうすればよいですか?
前もって感謝します!
両方のピアのローカル 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";
}
}