首页  >  问答  >  正文

javascript - 【新手】nodejs怎么解析udp数据?

如图,想从接收到的数据里的频率信息和幅度信息读出来。但是这个命令头里的数据点数怎么读出来呢?还有后面的数据?

后端是这样跟我说的,用sizeof读头大小,然后定义个XX,XX.datanum把数据点数知道了,然后内存复制频率信息,再来读取。。。。
一脸蒙逼。。。

之前做过读tcp数据的,所以用什么样的方法接收我知道,但是怎么解析呢,之前没有定义的这个命令头,而且数据字节标了的,仅用readInt方法就把数据读出来了。

这个应该怎么弄呢?求大神帮助。

阿神阿神2765 天前699

全部回复(2)我来回复

  • 大家讲道理

    大家讲道理2017-04-11 11:34:29

    没太明白你的意思,不过不管tcp 还是 udp 在node里面处理起来都还是比较容易的。

    以下代码贴的是官方手册的。
    获取数据在画线的这一段

    const dgram = require('dgram');
    const server = dgram.createSocket('udp4');
    
    server.on('error', (err) => {
      console.log(`server error:\n${err.stack}`);
      server.close();
    });
    
    
    ----------
    ##接收数据
    
    server.on('message', (msg, rinfo) => {
      console.log(`server got: ${msg} from ${rinfo.address}:${rinfo.port}`);
    });
    
    ##接收数据
    ----------
    
    
    server.on('listening', () => {
      var address = server.address();
      console.log(`server listening ${address.address}:${address.port}`);
    });
    
    server.bind(41234);

    拿到数据后估计就是按你和后台商量好的结构解析数据了把。

    回复
    0
  • 高洛峰

    高洛峰2017-04-11 11:34:29

    楼上的方法是对的,不过之前用tcp方式的时候我已经知道了。
    我让后台把命令头读出是8个字节的。init 4字节,bool也是4字节。
    然后就简单了,readFloat直接读数据(以我的为例,这里面读出来是800),.length读出来长度为6408,
    这就好办了,排除前面的8字节,后面800乘以4+800乘以4=6400刚好分别对应频率和幅度信息,
    一个readInt32LE循环读出数据就行了。

    回复
    0
  • 取消回复