node.js如何在发送后等待服务器套接字响应

时间:2019-06-14 11:22:25

标签: javascript node.js udp datagram fins

我的问题是我需要与服务器通信,并且每次发送UDP套接字时,服务器都会回复。我需要的是每次发送时都需要等待答复或整理答复以便以后再次使用之前。

我不习惯使用node.js,我意识到与其使用send和recv命令(我在带套接字的python中创建了一个类似的程序),而是发生了一个事件,该事件在数据到达我的客户端时触发,我尝试使用函数回调,但我不知道如何等待事件继续执行函数或将到达的数据存储在变量中,并检查变量是否要到达数据。

var dgram = require('dgram');
var read_result = [];
var udpsocket = dgram.createSocket('udp4');

udpsocket.on('message', function (message, remote) {
    read_result.push(message.toString("hex"));
    console.log(remote.address + ':' + remote.port +' - ' + message.toString('hex'));
});


function executeCommand_read(message){
    var BufferData = new Buffer.from(message, "hex");
    sendRawSocket(BufferData);

    //i want to return here the result from here

    //return resultData

}

function sendRawSocket(BufferData){
    udpsocket.send(BufferData, 0, BufferData.length, 9600, '192.168.250.1', function(err, bytes) {
        if (err) throw err;
        console.log('UDP message sent, the bytes: ' + bytes + " the data " + BufferData.toString('hex'));
    });
}

executeCommand_read('800003000100003700010101320064010002');
executeCommand_read('800003000100003700010101320064010002');
executeCommand_read('800003000100003700010101320064010002');
executeCommand_read('800003000100003700010101320064010002');
executeCommand_read('800003000100003700010101320064010002');
executeCommand_read('800003000100003700010101320064010002');

在这种情况下,结果是:

已发送UDP消息,字节:18数据800003000100003700010101320064010002

已发送UDP消息,字节:18数据800003000100003700010101320064010002

已发送UDP消息,字节:18数据800003000100003700010101320064010002

已发送UDP消息,字节:18数据800003000100003700010101320064010002

已发送UDP消息,字节:18数据800003000100003700010101320064010002

已发送UDP消息,字节:18数据800003000100003700010101320064010002

192.168.250.1:9600-c000020037000001000101010100000101

192.168.250.1:9600-c000020037000001000101010100000101

192.168.250.1:9600-c000020037000001000101010100000101

192.168.250.1:9600-c000020037000001000101010100000101

192.168.250.1:9600-c000020037000001000101010100000101

192.168.250.1:9600-c000020037000001000101010100000101

它读取并且答复是正确的,但是当我仍在函数executeCommand_read中以将其返回给调用它的人时,我不知道如何处理它们。我想做一个计时器,每当我调用此函数时,我都希望结果更新此范围之外的值。

试图将'message'事件放入send回调中,试图存储服务器响应并进行循环,所以当正确的数据到达时它会返回值,但我真的不知道该怎么做...

请帮助

0 个答案:

没有答案