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

Android OkHttp3连接Socket服务器报错:HTTP 101响应异常(404)

解决OkHttp3连接WebSocket时出现java.net.ProtocolException: Expected HTTP 101 response but was '404 Not Found'的问题

问题原因

  • 你当前使用的https://协议头不符合WebSocket规范,WebSocket连接应使用ws://(明文)或wss://(加密)作为协议前缀
  • SocketIO库会自动处理WebSocket连接的路径转换与参数拼接,而OkHttp需要你明确指定服务器端SocketIO对应的WebSocket端点路径(SocketIO默认端点为/socket.io/,且需附带协议版本等查询参数)

解决方案

  1. 将URL协议头替换为wss://(匹配原https的加密连接场景)
  2. 补充SocketIO的WebSocket端点路径及必要参数,完整URL格式应为:wss://url.com:3003/socket.io/?EIO=4&transport=websocket(EIO版本号需与服务器端SocketIO版本对应,通常v4版本对应EIO=4)

修改后的代码

private fun run() {
    val client: OkHttpClient = OkHttpClient.Builder()
        .readTimeout(3, TimeUnit.SECONDS)
        .build()
    // 使用正确的SocketIO WebSocket端点URL
    val socketUrl = "wss://url.com:3003/socket.io/?EIO=4&transport=websocket"
    val request: Request = Request.Builder()
        .url(socketUrl)
        .build()
    client.newWebSocket(request, this)
    client.dispatcher.executorService.shutdown()
}

额外说明

  • 若不确定EIO版本号,可通过浏览器开发者工具查看SocketIO连接时的请求URL,直接复制对应的参数部分
  • OkHttp的newWebSocket方法会自动添加WebSocket握手所需的Upgrade: websocket和Connection: Upgrade请求头,无需手动配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 08:55:16