【问题标题】:Strange error when turning a server response from the chrome.sockets.tcp api from an ArrayBuffer into a string将来自 ArrayBuffer 的 chrome.sockets.tcp api 的服务器响应转换为字符串时出现奇怪的错误
【发布时间】:2014-04-25 01:01:34
【问题描述】:

我正在创建一个适用于 irc 协议的 chrome(打包)应用程序。所以,这就是我的听众的样子:

chrome.sockets.tcp.onReceive.addListener(function(info){
    console.log("received data");
    info.data = ab2str(info.data);
    console.log(info);
})

ab2str 应该将 ArrayBuffers 转换为字符串。我已经从 html5rocks 复制了它:

function ab2str(buf) {
    return String.fromCharCode.apply(null, new Uint16Array(buf));
}

但是在端口 8002 上连接到irc.freenode.net,我在日志中得到奇怪的字符串,并且在某些情况下,我得到以下错误:

Error in event handler for sockets.tcp.onReceive: RangeError: bofyshould be a multiple ofe
at new Uint16Array (native)
at ab2str (chrome-extension://jkmacdefiplofpdmgimbaobepnigcchm/js/protocol.js:80:41)
at chrome-extension://jkmacdefiplofpdmgimbaobepnigcchm/js/protocol.js:73:15
...

大部分堆栈跟踪看起来像内部 chrome 代码,所以我把它省略了。

我做错了什么?在发送 USER 和 NICK 消息之前,我是否应该不监听任何数据?

我已确保我在不需要 ssl 的端口上连接到 freenode,如 this page about freenode's servers 中所述

【问题讨论】:

    标签: javascript sockets google-chrome irc google-chrome-app


    【解决方案1】:

    IRC 是一个 ascii 协议,所以我应该将单个字节解释为字符,我可以通过将 Uint16Array 替换为 Uint8Array 来做到这一点

    【讨论】:

      猜你喜欢
      • 2015-10-19
      • 2011-12-31
      • 2012-04-07
      • 1970-01-01
      • 2014-08-28
      • 2016-11-30
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      相关资源
      最近更新 更多