如何将Mac主机连接到Android模拟器中的服务器?
从Mac主机访问Android模拟器内服务器的正确姿势
看起来你已经走对了方向,但差了一点点细节!我之前也碰到过类似的问题,给你梳理下正确的操作步骤和排查点:
首先明确你的场景:Android模拟器里跑了个监听localhost:6789的服务器,模拟器内的客户端能正常通信,但Mac主机连不上,之前试了端口转发没生效。
你之前的操作里,端口转发的命令少了关键的地址参数,导致规则没正确生效。按下面的步骤来:
正确的端口转发操作
连接到模拟器控制台
打开Mac终端,执行:telnet localhost 5554(用
telnet比nc更稳定,是官方推荐的控制台连接方式)添加准确的转发规则
连接成功后,在控制台里输入这条命令:redir add tcp:5000:127.0.0.1:6789这里必须加上
127.0.0.1,因为模拟器里的localhost就是它自身的回环地址,明确指定这个地址能避免转发规则的歧义,确保流量正确导向模拟器内的服务器。退出控制台
输入quit或者按Ctrl+]再输入quit退出控制台即可。测试连接
现在在Mac终端执行:nc localhost 5000输入字符串后,应该就能收到模拟器服务器返回的内容了,完美匹配你想要的效果!
为什么之前的操作失败?
你之前的redir add tcp:5000:6789命令没有指定目标地址,虽然理论上模拟器会默认用自身的回环地址,但实际操作中这个省略会导致规则不生效,加上127.0.0.1就能解决这个问题。
关于ifconfig里的一堆网络接口
其实完全不用纠结这些!因为我们用的是回环地址localhost(也就是127.0.0.1)来访问转发后的端口,不需要用到主机的外部IP或者其他网络接口,直接用localhost就够了。
额外排查点(如果还是不行的话)
- 确认模拟器内的服务器是监听
0.0.0.0或者127.0.0.1,如果服务器只绑定了模拟器的内部私有IP,可能会导致转发失败; - 重启模拟器后重新添加转发规则,有时候模拟器的网络状态会出现异常,重启后就能恢复;
- 检查Mac的防火墙是否拦截了
5000端口的流量,可以临时关闭防火墙测试一下。
内容的提问来源于stack exchange,提问作者Cristi
相关产品推荐
相关产品推荐

