あなたが得ることができる最良の答えはおそらく真野からのものです:
同じ問題が発生しました。両方のデバイスがグループ所有者のIPを知っているため、グループ所有者にメッセージを送信することはすでに可能です。送信する最初のメッセージには、他のデバイスのIPアドレスを含めることができます。それ以降、双方向通信が可能になります。
これが私がそれをどのように実装したかです。WiFi Directを介してクライアントをグループ所有者に接続すると、グループ所有者のIPアドレスを取得し、ソケットを介してグループ所有者にメッセージを送信します。何かのようなもの:
Socket socket = new Socket();
socket.setReuseAddress(true);
socket.connect((new InetSocketAddress(mIP, mPort)), SOCKET_TIMEOUT);
OutputStream os = socket.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(os);
oos.writeObject(new String("BROFIST");
oos.close();
os.close();
socket.close();
あなたはすでにmIP(グループ所有者のIPアドレス)を知っていて、mPortを決定し、次のようにグループ所有者の接続を受信するだけです。
Socket serverSocket = new ServerSocket(mPort);
serverSocket.setReuseAddress(true);
Socket client = serverSocket.accept();
ObjectInputStream objectInputStream = new ObjectInputStream(client.getInputStream());
Object object = objectInputStream.readObject();
if (object.getClass().equals(String.class) && ((String) object).equals("BROFIST")) {
Log.d(TAG, "Client IP address: "+client.getInetAddress());
}
これは私が使用している実際のコードです。WifiP2pDeviceはMACとIPのInetAddressのみを提供するため、このメッセージを送信者のMACを含むメッセージオブジェクトなどの有用な情報に置き換えます。 InetAddressオブジェクトからMACを取得する方法はありますか?)