[Android]Wi-Fi Directでスマホ間通信

 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 件のコメント :

コメントを投稿