Wi-Fi Direct/P2Pは、通常のWi-Fiと見なすことができますが、グループ所有者(GO)はソフトウェアアクセスポイント(DHCPサーバ、プロビジョニングなど)として機能します。あなたの最後の質問に答えるために、yes Wi-Fi DirectはIPを使ってデータを送受信します。
グループ内のすべてのメンバーにデータを送信しますか?これには2つの解決策があります。
- マルチキャストを使用して一度メッセージをブロードキャストします。
- グループ内の個々のクライアントにメッセージを送信します。
最も効率的な方法は、データを一度だけ送信する必要があるため、マルチキャストを使用してデータをブロードキャストするという解決策1になります。残念なことに、多くのデバイスが非ユニキャストトラフィックをブロックしているように見えるため、Wi-FiマルチキャストのサポートはAndroidでは非常に細分化されています。このルートを下りたい場合は、詳細情報についてはthis articleを参照してください。
すべてのデバイスでサポートを保証し、少量のデータのみを送信する場合は、ソリューション2が最適です。 GOはグループ内のクライアントのIPアドレスを必要としますが、AndroidでWi-Fi Directが実装されるためGO IPだけがすべてのデバイスに認識されます。あなたがする必要があるすべての
private static final int SERVER_PORT = 1030;
private ArrayList<InetAddress> clients = new ArrayList<InetAddress>();
public void startServer() {
clients.clear();
ServerSocket serverSocket = new ServerSocket(SERVER_PORT);
// Collect client ip's
while(true) {
Socket clientSocket = serverSocket.accept();
clients.add(clientSocket.getInetAddress());
clientSocket.close();
}
}
今:グループ所有者コード
クライアントコード
private static final int SERVER_PORT = 1030;
... // on group join:
wifiP2pManager.requestConnectionInfo(channel, new ConnectionInfoListener() {
@Override
public void onConnectionInfoAvailable(WifiP2pInfo p2pInfo) {
if (!p2pInfo.isGroupOwner) {
// Joined group as client - connect to GO
Socket socket = new Socket();
socket.connect(new InetSocketAddress(p2pInfo.groupOwnerAddress, SERVER_PORT));
}
}
});
:一つの解決策は、自分のIPアドレスを取得するには、クライアントはGO上のソケットに接続させることですそれぞれのクライアント上でserversocketを起動し、それぞれのクライアントとのソケット接続を作成し、ブロードキャストするメッセージを送信するクライアントリストを繰り返し実行します。
あなたの努力は成功しましたか?はいの場合は、私に知らせてください、私は同じ問題に直面しており、解決策を得ることができません。可能なすべての文書を掘り下げましたが、成功しませんでした:(:( –