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

WebSocket下XOR数据帧二进制扫描结果异常排查求助

WebSocket帧解析异常排查求助

浏览器通过WebSocket向本地Tcl脚本传递如下JSON字符串:

{"ops":"AudioNotes EditSgmtTitle","params":{"doc_id":100,"title":"Short Segment Title (Looks Pretty Good aa Maybe)"},"reqId":1}

添加UI编辑分段标题功能时,偶然输入测试字符后发现:特定字符串长度会导致读取端出现异常,具体情况如下:

  • 该字符串在Kate文本编辑器和活跃tclsh会话中,长度均为127
  • Tcl中读取XOR帧的起始代码:
if { [binary scan [coread $sock 2] B16 bits] != 1
  || [scan $bits %1b%1b%1b%1b%4b%1b%7b \
        fin rsv1 rsv2 rsv3 op m pl] != 7 } {

这段代码返回的payload长度(pl)为126,导致后续执行[binary scan [coread $sock 2] Su pl]读取两个字节作为无符号整数时,得到大小不定的超大值,例如:

Error in XOR_Read: expected non-negative integer but got "6717638123588400952" Closing socket.
Error in XOR_Read: expected non-negative integer but got "18173768903968447991" Closing socket.

  • 当title属性中的aa改为单个a时,pl仍为126,但XOR帧读取、解码均正常,doc_id为100的title可正确写入数据库
  • 浏览器控制台输出的请求字符串始终一致,该Socket和XOR解码代码已稳定运行两年,仅当字符串长度恰好为127时触发异常,怀疑coread协程存在问题,其代码如下:
proc ::WEBS::coread {sock reqBytes} {
  set fullRead {}
  set remBytes $reqBytes
  while {![chan eof $sock]} {
    yield
    append fullRead [set loopRead [read $sock $remBytes]]
    if {[incr remBytes -[string length $loopRead]] == 0} {
      return $fullRead
    }
  }
  throw {COREAD EOF} "Unexpected WEBS EOF"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 00:52:38