Maison > Questions et réponses > le corps du texte
如图,想从接收到的数据里的频率信息和幅度信息读出来。但是这个命令头里的数据点数怎么读出来呢?还有后面的数据?
后端是这样跟我说的,用sizeof读头大小,然后定义个XX,XX.datanum把数据点数知道了,然后内存复制频率信息,再来读取。。。。
一脸蒙逼。。。
之前做过读tcp数据的,所以用什么样的方法接收我知道,但是怎么解析呢,之前没有定义的这个命令头,而且数据字节标了的,仅用readInt方法就把数据读出来了。
这个应该怎么弄呢?求大神帮助。
大家讲道理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);
拿到数据后估计就是按你和后台商量好的结构解析数据了把。
高洛峰2017-04-11 11:34:29
楼上的方法是对的,不过之前用tcp方式的时候我已经知道了。
我让后台把命令头读出是8个字节的。init 4字节,bool也是4字节。
然后就简单了,readFloat直接读数据(以我的为例,这里面读出来是800),.length读出来长度为6408,
这就好办了,排除前面的8字节,后面800乘以4+800乘以4=6400刚好分别对应频率和幅度信息,
一个readInt32LE循环读出数据就行了。