Nodejs 关于UDP socket 接收到的数据转HEX的问题

Nodejs 关于UDP socket 接收到的数据转HEX的问题

    var dgram = require(“dgram”);

var server = dgram.createSocket(“udp4”);

server.on(“message”, function (msg, rinfo) { console.log("server got: " + msg + " from " + rinfo.address + “:” + rinfo.port); });

server.on(“listening”, function () { var address = server.address(); console.log("server listening " + address.address + “:” + address.port); });

server.bind(3210);

接收到的数据msg如何转为 hex? 谢谢


3 回复

当然可以。您需要将接收到的 msg 数据转换为十六进制(HEX)格式。这可以通过 Node.js 的内置 Buffer 对象来实现。以下是修改后的代码示例,它展示了如何将接收到的 UDP 数据转换为十六进制字符串。

修改后的代码

var dgram = require("dgram");

var server = dgram.createSocket("udp4");

server.on("message", function (msg, rinfo) {
  // 将接收到的消息转换为十六进制字符串
  var hexString = msg.toString('hex');
  
  console.log("server got: " + hexString + " from " +
    rinfo.address + ":" + rinfo.port);
});

server.on("listening", function () {
  var address = server.address();
  console.log("server listening " +
      address.address + ":" + address.port);
});

server.bind(3210);

解释

  1. 导入模块:

    var dgram = require("dgram");
    

    这行代码导入了 Node.js 的 dgram 模块,该模块用于创建 UDP 套接字。

  2. 创建 UDP 套接字:

    var server = dgram.createSocket("udp4");
    

    创建一个 UDP4 套接字实例。

  3. 处理消息事件:

    server.on("message", function (msg, rinfo) {
      // 将接收到的消息转换为十六进制字符串
      var hexString = msg.toString('hex');
      
      console.log("server got: " + hexString + " from " +
        rinfo.address + ":" + rinfo.port);
    });
    

    当服务器接收到消息时,会触发 message 事件。在这个事件处理器中,我们使用 msg.toString('hex') 方法将接收到的 Buffer 对象转换为十六进制字符串,并将其打印出来。

  4. 处理监听事件:

    server.on("listening", function () {
      var address = server.address();
      console.log("server listening " +
          address.address + ":" + address.port);
    });
    

    当服务器开始监听指定端口时,会触发 listening 事件。这里打印出服务器正在监听的地址和端口。

  5. 绑定端口:

    server.bind(3210);
    

    绑定服务器到指定的端口(这里是 3210 端口)。

这样,当服务器接收到 UDP 数据包时,数据会被自动转换成十六进制字符串并打印出来。希望这对您有所帮助!


通过

len = buf.write(msg, 0);
console.log(buf.toString('hex', 0, len));

解决了。

要将接收到的 UDP 数据从 Buffer 转换为十六进制字符串,你可以使用 Node.js 的内置方法。以下是如何修改你的代码以实现这一目标:

示例代码

const dgram = require('dgram');

const server = dgram.createSocket('udp4');

server.on('message', (msg, rinfo) => {
  // 将 Buffer 转换为十六进制字符串
  const hexString = msg.toString('hex');
  
  console.log(`server got: ${hexString} from ${rinfo.address}:${rinfo.port}`);
});

server.on('listening', () => {
  const address = server.address();
  console.log(`server listening ${address.address}:${address.port}`);
});

server.bind(3210);

解释

  1. msg.toString('hex'):
    • 这是将接收到的 Buffer 对象转换为十六进制字符串的方法。
    • toString() 方法接受一个编码参数 'hex',用于将二进制数据转换为十六进制表示。

通过这种方式,你可以轻松地将接收到的 UDP 数据转换为十六进制字符串,从而更容易地进行调试或进一步处理。

回到顶部