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

Ktor Android客户端WebSocket连接失败报IllegalStateException如何解决?

问题根因

该报错是Ktor CIO引擎发送WebSocket握手请求时,默认请求头没有匹配目标测试服务的传输规则要求:WebSocket握手为无请求体的GET请求,但目标服务要求必须明确声明无请求体的传输规则,要么指定Content-Length为0,要么开启分块传输,要么禁用长连接。

可行解决方案

方案1:禁用keep-alive+指定请求体长度

直接在HttpClient配置中添加对应请求头即可适配服务端规则,修改后的代码如下:

val client = HttpClient(CIO) {
    install(WebSockets)
    // 配置默认请求头匹配服务端要求
    defaultRequest {
        header("Connection", "close") // 禁用keep-alive
        header("Content-Length", 0) // 明确指定请求体长度为0
    }
}
GlobalScope.launch {
    client.webSocket("ws://82.157.123.54:9010/ajaxchattest") {
        // 此处添加WebSocket交互逻辑
    }
}

方案2:更换客户端引擎规避兼容性问题

如果方案1不生效,大概率是CIO引擎本身对自定义规则的WebSocket服务兼容性不足,可以更换为OkHttp引擎规避底层配置问题,操作如下:

  1. 先添加OkHttp引擎依赖(Gradle配置示例):
implementation "io.ktor:ktor-client-okhttp:你的Ktor版本号"
  1. 修改客户端初始化代码:
val client = HttpClient(OkHttp) {
    install(WebSockets)
}
GlobalScope.launch {
    client.webSocket("ws://82.157.123.54:9010/ajaxchattest") {}
}

额外提示

  • 生产环境不要使用GlobalScope,建议绑定和业务生命周期匹配的自定义协程作用域
  • 目标测试服务有连接频率限制,调试时不要短时间内频繁发起连接避免被临时屏蔽

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 02:54:03