如何从主机Ping安卓模拟器?向模拟器发送WebSocket请求方法
安卓模拟器与主机网络互通及WebSocket通信解决方案
一、先明确模拟器的网络逻辑
安卓默认AVD采用NAT模式,模拟器内部IP一般为10.0.2.15,但这个IP属于模拟器私有网段,主机无法直接访问。而模拟器能通过localhost访问主机,是因为NAT做了反向映射。要实现主机到模拟器的访问,要么用端口转发,要么切换到桥接模式。
二、主机Ping模拟器的两种方法
ICMP协议在NAT模式下无法直接转发,所以得换方式验证连通性:
1. NAT模式下用TCP连通性替代Ping
- 在模拟器里启动一个TCP监听服务,比如执行
nc -l 8080(没有netcat的话,用你自己的Android应用开个临时监听端口也行) - 主机上执行
adb forward tcp:8080 tcp:8080,将主机8080端口转发到模拟器的8080端口 - 主机用
tcping localhost 8080(或者telnet localhost 8080)验证连通,效果和Ping类似
2. 切换到桥接模式直接Ping
- 关闭模拟器,打开AVD Manager,点击对应模拟器的「Edit」按钮
- 展开「Show Advanced Settings」,找到「Network」选项,把「Network Mode」改成「Bridge」,选择主机的物理网卡(比如对应192.168.0.2的网卡)
- 启动模拟器后,在系统设置→关于手机→状态信息里查看IP,这个IP和主机在同一网段,主机直接Ping该IP即可
三、向模拟器发送WebSocket请求
核心是让主机能访问到模拟器里WebSocket Server的端口:
1. NAT模式(端口转发)
- 假设你的WebSocket Server在模拟器里监听8081端口
- 主机执行
adb forward tcp:8081 tcp:8081 - 主机的WebSocket客户端直接连接
ws://localhost:8081,请求会被转发到模拟器内部的服务
2. 桥接模式
- 获取模拟器的局域网IP(比如192.168.0.100)
- 主机客户端直接连接
ws://192.168.0.100:8081,和访问物理设备完全一致
四、获取主机上模拟器的网络接口信息
1. 直接查询模拟器内部网络配置
主机上执行命令,拉取模拟器的网络接口和IP:
# Android 9及以下版本 adb shell ifconfig # Android 10+版本 adb shell ip addr show
输出里的wlan0对应桥接模式的局域网IP,eth0是NAT模式的内部IP。
2. 查看已配置的adb端口转发
主机执行:
adb forward --list
会列出所有端口映射,格式为<模拟器序列号> tcp:<主机端口> tcp:<模拟器端口>,能清晰看到主机和模拟器的端口对应关系。
3. 验证主机上的端口连接状态
Windows系统用:
netstat -ano | findstr :<转发的端口号>
类Unix系统用:
lsof -i :<转发的端口号>
能看到主机对应端口的占用情况,确认端口转发是否生效。
内容的提问来源于stack exchange,提问作者Dmitry Kozin
相关产品推荐
相关产品推荐

