You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 06:10:38