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

遵循gRPC Kotlin Android快速入门仍遇Server Response: UNAVAILABLE问题求助

gRPC Kotlin Android 连接报错UNAVAILABLE排查方案

以下是文档未明确提及但可能导致问题的几个关键操作:

  • 修正Android端的目标地址
    绝对不能用localhost或127.0.0.1,这会指向安卓设备自身,必须替换为你电脑在局域网的实际IP(比如192.168.1.100)。检查安卓代码中ManagedChannel的初始化代码,确保地址配置正确:

    val channel = ManagedChannelBuilder.forAddress("192.168.1.100", 50051)
        .usePlaintext()
        .build()
    
  • 确保服务端绑定到局域网可访问地址
    部分gRPC服务端默认仅绑定127.0.0.1(本地回环),导致局域网内设备无法连接。修改服务端代码,强制绑定到0.0.0.0(允许所有网卡访问):

    import java.net.InetAddress
    
    // ...
    
    ServerBuilder.forPort(50051)
        .addService(HelloWorldService())
        .bindAddress(InetAddress.getByName("0.0.0.0"))
        .build()
        .start()
    

    重启服务端后,用命令验证端口监听状态:

    # Linux/macOS
    ss -tulpn | grep 50051
    # Windows
    netstat -ano | findstr :50051
    

    输出中需显示0.0.0.0:50051而非127.0.0.1:50051。

  • 解决Android 9+的明文网络限制
    Android 9及以上系统默认禁止明文网络请求(gRPC明文连接属于此类),需配置网络安全策略:

    1. 在res/xml目录下创建network_security_config.xml:
      <?xml version="1.0" encoding="utf-8"?>
      <network-security-config>
          <domain-config cleartextTrafficPermitted="true">
              <domain includeSubdomains="true">你的电脑局域网IP</domain>
          </domain-config>
      </network-security-config>
      
    2. 在AndroidManifest.xml的<application>标签中添加配置引用:
      android:networkSecurityConfig="@xml/network_security_config"
      

    (测试阶段可临时添加android:usesCleartextTraffic="true"到<application>标签,但正式环境不建议)

  • 验证设备与电脑的网络连通性
    通过adb shell ping电脑的局域网IP,确认网络通路正常:

    adb shell ping 192.168.1.100
    

    如果ping不通,检查路由器是否开启了AP隔离功能(部分路由器默认开启,会阻止局域网内设备互访)。

内容的提问来源于stack exchange,提问作者Karthik Kiran Karalgikar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 09:27:07