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

原生Java安卓应用连接WebSocket报错Expected HTTP 101 but was '200 OK'

错误原因及修复方案

核心错误原因

你遇到的java.net.ProtocolException: Expected HTTP 101 response but was '200 OK'错误是WebSocket握手失败的典型表现,WebSocket协议要求握手阶段服务端必须返回101 Switching Protocols响应,你收到200说明请求没有被当做WebSocket请求处理,结合你的代码有三个直接诱因:

  1. 你使用的测试地址ws://echo.websocket.org已经停止服务,当前访问该地址只会返回普通HTTP 200的静态页面,不支持WebSocket握手。
  2. 连接逻辑存在错误:你在调用client.newWebSocket()启动连接后,立刻执行了client.dispatcher().executorService().shutdown()关闭了OkHttp的执行线程池,此时WebSocket握手还没有完成,后台任务直接被终止,连接自然无法成功。
  3. 依赖版本过旧:你使用的OkHttp 3.10.0是2018年发布的旧版本,对新版WebSocket协议、高版本安卓系统的网络适配都存在兼容问题。

修复步骤

  • 第一步:替换WebSocket服务地址,使用你自己的业务服务端WebSocket地址,或当前可用的公共WebSocket测试端点。
  • 第二步:删除InitiateSocketConnection()方法中的client.dispatcher().executorService().shutdown();代码,OkHttp的线程池会自动管理生命周期,仅在你需要彻底销毁WebSocket客户端时再执行资源释放操作。
  • 第三步:升级OkHttp依赖到稳定新版本,将build.gradle中的依赖替换为:
implementation 'com.squareup.okhttp3:okhttp:4.12.0'
  • 额外适配:如果你使用明文ws协议,在安卓9及以上系统中需要在AndroidManifest.xml的<application>标签添加android:usesCleartextTraffic="true"配置,允许明文网络请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:15:03