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

Android端SocketIO连接报错EngineIOException: websocket error(iOS正常)求助

Android SocketIO 连接报错 EngineIOException: websocket error(iOS端正常)

问题详情

Android端使用SocketIO 2.0.0版本建立连接时,出现EngineIOException: websocket error异常,但iOS端连接完全正常。错误截图如下:
EngineIOException错误截图

Android端核心实现代码:

override fun init() = callbackFlow {
    val accessToken = tokenStorage.accessToken ?: return@callbackFlow
    val option = IO.Options.builder()
      .setUpgrade(false)
      .setTransports(arrayOf(WebSocket.NAME))
      .setExtraHeaders(mapOf("Authorization" to listOf("Bearer ".plus(accessToken)))) // 不加会返回401未授权
      .build()
    socket = IO.socket(BuildConfig.WS_URL, option)

    socket.on(Socket.EVENT_CONNECT) {
      trySend(true)
    }

    socket.on(Socket.EVENT_CONNECT_ERROR) {
      Log.d("xxxx", "asSocketPayload error: ${it[0]}")
    }

    socket.on(DEFAULT_EVENT) {
      it[0].asSocketPayload()
    }

    socket.connect()

    awaitClose {
      socket.disconnect()
    }
  }

解决方案尝试

1. 调整升级配置

你当前强制禁用了连接升级(setUpgrade(false)),部分服务端需要通过HTTP握手完成升级后才能建立WebSocket连接。尝试移除该配置,让客户端自动处理升级流程:

val option = IO.Options.builder()
  .setTransports(arrayOf(WebSocket.NAME))
  .setExtraHeaders(mapOf("Authorization" to listOf("Bearer $accessToken")))
  .build()

2. 校验请求头格式

确认服务端是否支持多值格式的请求头,尝试将Authorization头的值改为单个字符串(部分服务端不兼容列表格式):

.setExtraHeaders(mapOf("Authorization" to "Bearer $accessToken"))

3. 排查SSL证书问题(若使用WSS协议)

如果你的连接地址是wss://开头,Android端可能存在SSL证书验证失败的情况:

  • 排查阶段可临时关闭证书验证(仅用于测试,生产环境禁止):
val sslContext = SSLContext.getInstance("TLS")
sslContext.init(null, arrayOf<TrustManager>(object : X509TrustManager {
    override fun checkClientTrusted(chain: Array<out X509Certificate>?, authType: String?) {}
    override fun checkServerTrusted(chain: Array<out X509Certificate>?, authType: String?) {}
    override fun getAcceptedIssuers(): Array<X509Certificate> = emptyArray()
}), SecureRandom())

val option = IO.Options.builder()
  // 其他配置
  .setSSLContext(sslContext)
  .setHostnameVerifier { _, _ -> true }
  .build()
  • 生产环境需确保设备信任服务端证书,或在项目中导入自定义证书。

4. 确认服务端版本兼容性

SocketIO 2.0.0客户端需要匹配2.x版本的服务端,若服务端是3.x及以上版本,会因协议不兼容导致连接失败,建议确认服务端版本并保持客户端与服务端版本匹配。

5. 排查网络环境

部分Android设备的代理网络、内网防火墙会拦截WebSocket连接,尝试切换到手机流量或其他无限制网络测试。

内容的提问来源于stack exchange,提问作者Stevie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 00:02:36