【问题标题】:Node tcp socket: Read binary data from Enfora MT4000节点 tcp 套接字:从 Enfora MT4000 读取二进制数据
【发布时间】:2014-05-15 19:29:58
【问题描述】:

我正在使用 Enfora MT4000 设备。发生特定事件时,设备将数据发送到 tcp 或 udp 服务器。数据可以二进制或ASCII格式发送,但我需要使用二进制。

Enfora 设备配置有如下 AT 命令:

AT$EVENT=14,0,7,1,1
AT$EVENT=14,3,52,14,1578098

当我用 ASCII 配置设备时,服务器以这种格式接收数据:

r        13    0    0 $GPRMC,211533.00,A,3321.856934,S,07040.240234,W,0.0,0.0,120514,2.3,W,A*2B

但是,当我使用二进制时,数据看起来像这样:

$2K�  �Dk����a�H

有人知道 Node.js 如何从套接字转换二进制数据吗?我正在尝试用一个非常简单的脚本来做到这一点。

// server
require('net').createServer(function (socket) {
    console.log("connected");
    socket.setEncoding(null);
    socket.on('data', function (data) {
        console.log(data.toString());
    });
})

.listen(3041);

谢谢。

【问题讨论】:

    标签: node.js sockets tcp type-conversion binary-data


    【解决方案1】:

    “数据”事件处理程序中的data 参数已经是Buffer。通过调用data.toString(),您正在将该缓冲区转换为(默认为UTF-8)字符串。如果需要原始二进制数据,最好将其保留为 Buffer 并使用它。

    【讨论】:

    • 可以用javascript把缓冲区的数据转换成string吗?
    • ASCII 是 UTF-8 的子集,所以默认的 buffer.toString() 应该返回正确的结果
    • @DaniloAburto 目前尚不清楚您期望什么样的字符串。如果数据是部分二进制和部分字符串,则可以将 data.toString() 与编码以及开始和结束参数一起使用。
    • 我对数据类型感到困惑。我通过直接读取缓冲区(00 24 00 05 02 00 ...)解决了这个问题。感谢@mscdex。
    • 感谢您的回答,您能否举一个从 Node.js Buffer 对象中读取二进制文件的示例?找不到相关信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-04
    • 2019-04-02
    • 2011-02-26
    • 1970-01-01
    • 2014-09-15
    相关资源
    最近更新 更多