3 台の Android フォン (A、B、C) が同じアクセス ポイントに接続されているとします。したがって、各電話には異なる IP アドレスがあります。例えば:
- A は 192.168.1.50 にあります
- B は 192.168.1.60 です
- C は 192.168.1.70 です
それぞれに同じアプリをインストールしました。このアプリには、2 つのUDPソケットがあります。
DatagramSocket sendSocket = new DatagramSocket();
DatagramSocket receiveSocket = new DatagramSocket(55000);
各電話は異なる IP アドレスにあるため、すべての電話は他のすべての電話にパケットを送信できます。たとえば、B から A にパケットを送信するには、次のようにします。
InetAddress address = InetAddress.getByName("192.168.1.50");
byte[] data = "Hello".getBytes();
DatagramPacket sendPacket = new DatagramPacket(data, data.length, address, 55000);
sendSocket.send(sendPacket);
問題は、同じマシン上で 3 つのエミュレーターを使用してこのアプリケーションを開発およびデバッグするための最良の方法は何かということです。これにより、エミュレーターで実行するコードが、実際のセットアップで実行するコードとほぼ同じになります。
私が行った試み:
- ここで提供されているコードを使用して、同じマシンで 2 つのエミュレーターを起動し、それらの IP アドレスを出力して、両方のエミュレーターで同じ IP アドレスを取得しました
fe80::5054:ff:fe12:3456%eth0
。だから行き止まり。 - 2 つのエミュレーターのみを起動し、それぞれが受信ソケットと送信ソケット用の特定の異なるポートで起動しました。このアプローチは問題なく機能しますが、リダイレクトとデプロイがやや面倒で複雑になり始めるため、より多くのマシンでは使用できません。言うまでもなく、10.0.2.15 と 10.0.2.2 の IP アドレスをいじって動作させなければなりませんでした。