假设您将三部 Android 手机(A、B 和 C)连接到同一个接入点。所以每部电话都有不同的IP地址。例如:
- A 的地址是 192.168.1.50
- B 在 192.168.1.60
- C 位于 192.168.1.70
我在每一个中都安装了相同的应用程序。在这个应用程序中有两个 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);
现在的问题是:在同一台机器上使用三个模拟器开发和调试此应用程序的最佳方法是什么,这样在模拟器中运行它的代码几乎与在一台机器上运行它的代码相同真正的设置?
我做过的尝试:
- 使用提供的代码 here 我在同一台机器上启动了两个模拟器并打印了它们的 IP 地址,为两个模拟器获得了相同的 IP 地址:
fe80::5054:ff:fe12:3456%eth0
。所以死路一条。 - 只发布了两个模拟器,每个模拟器都在特定的不同端口上用于接收和发送套接字。这种方法工作正常,但它不适用于更多的机器,因为重定向和部署开始变得相当麻烦和复杂。更不用说我必须使用 10.0.2.15 和 10.0.2.2 IP 地址才能使其正常工作。
最佳答案
我没有好主意,这是一种解决方法,但您可以创建两个虚拟机(我使用 VirtualBox 作为虚拟机,它是免费的),将 Linux(可能是 Ubuntu)放在他们,安装 SDK 并将您的代码放在上面进行测试。
更好的主意:创建多个 AVD。在每个应用程序上调试您的应用程序。只需(在 Eclipse 中)F11,退出。关闭 AVD。启动其他 AVD。对每个 AVD 重复。准备就绪后,启动它们并从模拟器上的应用程序菜单启动应用程序。
关于android - 开发可与模拟器或手机一起使用的网络应用程序的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10307449/