每个Android模拟设备(后面简称AVD)都有自己独立的网络地址空间,它们之间是互相隔离的。
实际上AVD与当前调试的电脑所在的局域网也是隔离的,AVD可以通过当前调试PC转发,能访问局域网。
AVD的网络地址空间为10.0.2/24,其自身地址为10.0.2.15,PC的地址为10.0.2.2。
实际上,如果用adb shell(或者adb -s 设备名 shell)进入AVD的命令行模式,再使用getprop命令,可以看到
[net.eth0.gw]:10.0.2.2
也就是AVD使用PC作为网关,对目标地址为10.0.2/24地址空间以外的数据进行转发
但实际中有时会碰到比较头疼的事情。
比如运行AVD的PC机所在的局域网地址空间为192.168.0/24,自身的IP为192.168.0.23。现在想通过AVD给
192.168.0/24局域网发送UDP广播,像下面这样直接发肯定是不行的
为达到AVD发送广播到192.168.0/24
实际上AVD与当前调试的电脑所在的局域网也是隔离的,AVD可以通过当前调试PC转发,能访问局域网。
AVD的网络地址空间为10.0.2/24,其自身地址为10.0.2.15,PC的地址为10.0.2.2。
实际上,如果用adb shell(或者adb -s 设备名 shell)进入AVD的命令行模式,再使用getprop命令,可以看到
[net.eth0.gw]:10.0.2.2
也就是AVD使用PC作为网关,对目标地址为10.0.2/24地址空间以外的数据进行转发
但实际中有时会碰到比较头疼的事情。
比如运行AVD的PC机所在的局域网地址空间为192.168.0/24,自身的IP为192.168.0.23。现在想通过AVD给
192.168.0/24局域网发送UDP广播,像下面这样直接发肯定是不行的
String msg="Broadcast Message";
byte[] buffer=msg.getBytes();
InetAddress addr=InetAddress.getByName("255.255.255.255");
int port=12345;
DatagramPacket dp=new DatagramPacket(buffer,buffer.length,addr,port);
DatagramSocket ds=new DatagramSocket(port);
ds.send(dp);
这只会将广播发送到10.0.2/24地址空间里
为达到AVD发送广播到192.168.0/24