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

Android端如何获取WebSocket服务器的完整错误响应?

如何获取WebSocket服务器的完整错误响应(Socket.io Android客户端)

当前你通过EngineIOException仅能看到"server error"的笼统错误,无法获取服务器返回的具体响应内容,可通过以下方法排查:

1. 从异常中提取服务器响应数据

EngineIOException包含服务器返回的原始响应,直接访问它的data字段即可获取,无需仅打印堆栈:

socketDeepgram.on(Socket.EVENT_CONNECT_ERROR) { args ->
    val exception = args[0] as EngineIOException
    exception.printStackTrace()
    // 提取并打印服务器响应
    val serverResponse = exception.data
    when (serverResponse) {
        is String -> Log.e("SocketError", "服务器响应: $serverResponse")
        is ByteArray -> {
            val responseStr = String(serverResponse, Charsets.UTF_8)
            Log.e("SocketError", "服务器响应: $responseStr")
        }
        else -> Log.e("SocketError", "未知响应格式: $serverResponse")
    }
}

这样就能得到和Postman中一致的错误详情。

2. 强制使用WebSocket传输模式

从错误堆栈可见,当前客户端用的是Polling传输(PollingXHR),和Postman直接使用WebSocket的模式存在差异,可能导致请求参数/头处理不一致。可强制客户端仅使用WebSocket:

val options = IO.Options.builder()
    .setAuth(singletonMap("Token", "123"))
    .setTransports(arrayOf("websocket")) // 指定仅用WebSocket传输
    .build()

3. 抓包对比请求差异

用Charles或Wireshark抓取Android设备的网络包:

  • 配置设备代理并安装HTTPS证书,确保能捕获加密流量
  • 对比Android客户端与Postman发送的请求头、参数格式,尤其是Token字段的传递方式
  • 直接查看服务器返回的完整错误响应内容

4. 检查版本兼容性

你使用的客户端版本是io.socket:socket.io-client:2.1.0,需确认服务器端Socket.io版本是否兼容:

  • 2.x客户端仅兼容2.x版本的服务器
  • 若服务器是3.x/4.x版本,需升级客户端到对应版本(如4.1.3),同时调整setAuth等配置逻辑

内容的提问来源于stack exchange,提问作者Xena Warrior Princess

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 05:40:20