Android系统为实现通信将PC电脑IP设置为10.0.2.2,自身为10.0.2.15/127.0.0.1。然而PC电脑并没有为Android模拟器系统指定IP,所以PC只能通过端口重定向来实现和Android模拟器的通信。
PC电脑和Android模拟器系统之间通信
1、运行模拟器
2、打开命令行,执行:
telnet localhost 5554
5554是模拟器的端口(位于Android模拟器窗口标题栏)
3、在命令行下执行:
格式:redir add <udp/tcp >:<pc端口>:< 模拟器端口 >
例如:redir add udp:8888:8888
redir add tcp:8888:8888
执行此命令之后,会把PC 8888端口接收到的tcp/udp数据转到模拟器的8888端口。
两个Android模拟器系统之间通信
第一种方法:使用redir(验证可行)
1、启动模拟器emulator-5554和emulator-5556
2、打开命令行执行
telnet localhost 5554
连接到模拟器5554
3、成功连接后,继续执行:
redir add tcp:5000:6000将PC端口5000绑定到模拟器5554的端口6000上。
4、此时模拟器5556通过向PC电脑端口5000(即地址:10.0.2.2:5000)发送tcp/udp数据包跟模拟器5554通信。
5、同理根据步骤2、3来实现PC电脑对模拟器5556的端口转发。
添加成功后,我们可以用redir list命令来列出已经添加的映射端口,redir del可以进行删除。
相信只要理解了PC电脑和Android模拟器系统之间通信,便知道怎么实现多个模拟器之间通信。
第二种方法:使用adb forward(验证可行)
1、启动模拟器emulator-5554和emulator-5556
2、打开命令行执行
adb -s emulator-5554 forward tcp:8888 tcp:9999
将PC上的8888端口映射到模拟器5554的9999端口上。
3、成功执行后:
模拟器(5554)-SERVER:
ServerSocket server = new ServerSocket(9999);
模拟器(5556)-CLIENT:
Socket socket = newSocket("10.0.2.2", 8888);
因为模拟器5556连接的地址10.0.2.2: 8888相当于本机的127.0.0.1: 8888,由于进行了端口映射本机8888上的连接请求都映射到5554: 9999上,因此模拟器5556的请求会发送到5554上.