AndroidでWi-Fi Directを使って通信する手順は以下に掲載されています。
Wi-Fi Direct で P2P 接続を作成する
https://developer.android.com/training/connect-devices-wirelessly/wifi-direct?hl=ja
上記の手順に従えば、スマホ間の接続を行うことができますが、以下の問題点が発生します。
- サーバーとなった(WifiP2pInfo::isGroupOwner == true)スマホは、接続先のスマホのIPアドレスが分からない
これを解決するには、オーナーで無いスマホか、オーナー側に自分のIPを何らかの方法で送信する必要があります。
具体的には以下のようにデータの送受信を行えないばよいです。
○サーバー側
//受信のための待機ソケットを作成する serverSocket = new ServerSocket(); serverSocket.setReuseAddress(true); serverSocket.bind(new InetSocketAddress(PORT_SERVER));//PORT_SERVERは任意のポート番号 //受信を待機する client = serverSocket.accept(); //データを読み込む InputStream inputStream = client.getInputStream(); ObjectInputStream objectInputStream = new ObjectInputStream(inputStream); //送信された文字列を取得する String name = (String) objectInputStream.readObject(); //アドレスを取得する InetAddress address = client.getInetAddress(); //ストリームを閉じる inputStream.close();
○クライアント側
//ソケットを作成する Socket socket = new Socket(); //サーバーに接続する(serverAddressはWifiP2pManager::requestConnectionInfoで接続先のアドレスを取得します。) socket.connect(new InetSocketAddress(serverAddress, PORT_SERVER_DEVICE)); //送信ストリームを開きます。 OutputStream outputStream = socket.getOutputStream(); ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream); //デバイス名を送ります。(端末のデバイス名はWIFI_P2P_THIS_DEVICE_CHANGED_ACTIONイベントで取得できます。) objectOutputStream.writeObject(thisDeviceName); //ストリームとソケットをクローズします。 objectOutputStream.close(); socket.close();
Wi-Fi Directは、スマホ間の通信を簡単に行うには便利なのですが、実際に通信を行うには手間が多いのが難点す。
0 件のコメント :
コメントを投稿