Android Retrofit调用Golang API遇SocketTimeoutException,Postman正常
Android Retrofit调用Golang后端API超时排查方案
一、排除未调用Socket代码的影响
你添加的StartSocket()函数如果确实没有被调用,这段代码不会对现有Gin服务产生任何干扰——它既不会占用5000端口,也不会影响API请求处理逻辑,可以暂时忽略,先聚焦连通性核心问题。
二、核心排查与解决步骤
1. 修正后端服务监听地址
Gin默认用r.Run()启动时,只会监听localhost:5000,仅允许PC本地访问,外部设备(如你的平板)无法连接。
解决方法:修改Gin启动代码,让服务监听所有网卡的5000端口:
// 替换原有的r.Run() r.Run("0.0.0.0:5000")
修改后,同一网络内的设备就能通过PC的IP地址访问服务。
2. 验证网络连通性
- 在平板浏览器中访问
http://192.168.45.102:5000/account/login(用GET请求测试,只要能得到后端的错误响应就说明连通正常)。 - 若浏览器无法访问,检查:
- PC和平板是否处于同一网络(同一热点/局域网)。
- PC防火墙是否允许5000端口的入站连接:找到你的Golang程序,在防火墙设置中允许其通过私有/公共网络。
- 用平板ping PC的IP(192.168.45.102),若ping不通,说明网络本身存在问题,检查热点或路由器配置。
3. 检查Retrofit BaseUrl配置
确保Retrofit的BaseUrl是PC的IP+端口,且格式正确:
val retrofit = Retrofit.Builder() .baseUrl("http://192.168.45.102:5000/") .client(httpClient.build()) .addConverterFactory(GsonConverterFactory.create()) .build()
注意不要使用localhost或127.0.0.1,这在平板上指向设备自身,而非你的PC。
4. 优化后端API性能
Postman显示登录接口耗时约10秒,已严重超出正常响应范围,即使Retrofit设置了180秒超时,也可能因后端处理过慢导致连接异常。
排查后端性能瓶颈:
- 检查GORM数据库查询是否缺失索引(比如用户名/密码查询是否走索引)。
- 查看后端日志,确认登录请求处理流程中是否有阻塞操作(如同步调用外部服务、大量数据处理)。
- 用Golang的pprof工具分析服务的CPU、内存占用,定位慢函数。
三、额外验证步骤
- 在PC上用curl模拟Android请求,排查请求格式问题:
curl -X POST http://192.168.45.102:5000/account/login \ -H "Content-Type: application/json" \ -d '{"username":"你的用户名","password":"你的密码"}'
- 检查Android端网络权限:确保
AndroidManifest.xml中添加了<uses-permission android:name="android.permission.INTERNET" />。
内容的提问来源于stack exchange,提问作者rminaj
相关产品推荐
相关产品推荐

