Kotlin应用调用本地Express服务器出现SocketTimeoutException问题
排查步骤与解决方案
1. 验证基础网络连通性
- 用你的Android设备(或模拟器)自带浏览器访问
http://192.168.0.10:3100,如果无法加载内容,说明问题出在网络层面,而非代码。
2. 检查Express服务器绑定地址
- 确保Express服务器绑定到
0.0.0.0而非localhost/127.0.0.1。后者仅允许本机访问,局域网设备无法连接。修改启动代码:app.listen(3100, '0.0.0.0', () => { console.log('Server running on http://0.0.0.0:3100'); });
3. 配置电脑防火墙规则
- Windows:打开Windows Defender防火墙,新建入站规则,允许TCP协议的3100端口通过;或临时关闭防火墙测试。
- Mac:进入系统设置→网络→防火墙,添加运行Express的Node.js进程,允许其接收网络连接。
4. 确认设备与电脑在同一局域网
- 物理设备:确保手机和电脑连接同一WiFi网络,禁用移动数据。
- Android模拟器:使用
10.0.2.2替代电脑的局域网IP(模拟器将此地址映射到主机的localhost),修改Retrofit的baseUrl为http://10.0.2.2:3100/。
5. 验证端口占用情况
- 检查3100端口是否被Express正确占用:
- Windows:执行命令
netstat -ano | findstr :3100,确认PID对应的进程是Node.js。 - Mac/Linux:执行命令
lsof -i :3100,确认监听进程为Node。
- Windows:执行命令
6. 其他排查动作
- 重启Android设备/模拟器,重置网络连接。
- 检查Retrofit的baseUrl是否正确,确保末尾包含斜杠(如
http://192.168.0.10:3100/)。
内容的提问来源于stack exchange,提问作者Manuel Lucas
相关产品推荐
相关产品推荐

