React Native项目连接安卓真机时出现SocketTimeoutException端口连接超时报错
安卓真机调试React Native端口连接超时排查
针对同WiFi环境下真机无法连接电脑19000端口的报错问题,按以下步骤逐一排查即可定位解决:
- 先做最基础的连通性校验:在安卓真机自带的浏览器地址栏直接输入
http://192.168.0.102:19000,看是否能正常加载出Metro Bundler的服务页面。如果这一步就加载失败,说明问题出在网络层,和RN项目本身无关。 - 关闭笔记本系统防火墙的拦截规则:Windows、macOS默认开启的防火墙,会默认拦截来自局域网的非信任端口入站请求。可以先临时完全关闭系统防火墙测试连接,如果关闭后真机可以正常访问Metro页面,后续只需要在防火墙规则中,给19000端口、对应的Node运行进程添加永久入站允许规则即可。
- 排查路由器的网络隔离功能:大部分家用路由器的访客WiFi、公共无线模式会默认开启AP隔离(客户端隔离),即使所有设备连同一个WiFi,设备之间也无法直接互访。需要进入路由器后台检查无线设置:确认手机没有连接到独立的访客WiFi,同时关闭AP隔离、客户端隔离相关的开关。
- 修正Metro服务的绑定地址:很多时候Metro启动时默认绑定127.0.0.1回环地址,只会接受本机的请求,局域网内的其他设备根本无法触达服务。启动Metro时要指定绑定所有网卡地址:
- 纯React Native项目启动命令:
npx react-native start --host 0.0.0.0 - Expo项目启动时选择LAN网络模式,不要选择仅本机访问的localhost模式
- 纯React Native项目启动命令:
- 清理残留的后台进程:如果之前启动过的Metro进程没有正常退出,会残留占用19000端口,且绑定在回环地址上。需要把电脑上所有正在运行的Node相关进程全部杀掉,重新启动Metro,启动后观察终端输出的服务地址,确认显示的是当前电脑的局域网IP,而不是仅显示localhost。
- 临时兜底绕开WiFi限制:如果以上网络配置调整完依然存在连通性问题,可以直接通过USB连接真机,执行端口转发命令
adb reverse tcp:19000 tcp:19000,把电脑的19000端口直接映射到真机本地,完全绕开WiFi网络的各种配置限制,就能正常进行调试。
内容的提问来源于stack exchange,提问作者Umang Patel
相关产品推荐
相关产品推荐

