2013-10-05 10 views
5

Androidのアプリケーションを開発していますが、範囲内のすべてのピアを検索してから、すべてのデバイスに接続します。発見を開始したデバイスがグループオーナーになり、クライアント、私はすべての接続のことをやったが、今私はグループの所有者にすべての接続するピアにメッセージを送信したい、これを達成するために、また、ピアツーピア通信の方法論は何か教えてください、P2P AndroidでもIPを使ってデータを送受信しますか?Android Wi-Fi Direct Network

ありがとうございました よろしくお願いします。

+0

あなたの努力は成功しましたか?はいの場合は、私に知らせてください、私は同じ問題に直面しており、解決策を得ることができません。可能なすべての文書を掘り下げましたが、成功しませんでした:(:( –

答えて

10

Wi-Fi Direct/P2Pは、通常のWi-Fiと見なすことができますが、グループ所有者(GO)はソフトウェアアクセスポイント(DHCPサーバ、プロビジョニングなど)として機能します。あなたの最後の質問に答えるために、yes Wi-Fi DirectはIPを使ってデータを送受信します。

グループ内のすべてのメンバーにデータを送信しますか?これには2つの解決策があります。

  1. マルチキャストを使用して一度メッセージをブロードキャストします。
  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を起動し、それぞれのクライアントとのソケット接続を作成し、ブロードキャストするメッセージを送信するクライアントリストを繰り返し実行します。

+0

アイデアは良いですが、私の場合は実装が機能していません。グループオーナーからクライアントにメッセージを送信できません。 –

関連する問題