Моя проблема здесь в том, что мне нужно связаться с сервером, и каждый раз, когда я отправляю сокет 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 - c0000200370000010001010100000101
192.168.250.1: 9600 - c0000200370000010001010100000101
192.168.250.1: 9600 - c0000200370000010001010100000101
192.168.250.1: 9600 - c0000200370000010001010100000101
192.168.250.1: 9600 - c0000200370000010001010100000101
192.168.250.1: 9600 - c0000200370000010001010100000101
он читает, и ответы верны, но я не знаю, как с ними обращаться, когда я все еще в функции executeCommand_read, чтобы вернуть их тому, кто ее вызывает. Я хочу сделать таймер, и каждый раз, когда я вызываю эту функцию, я хочу, чтобы результат обновлял значения вне этого.
Пытался поместить событие message внутри обратного вызова send, пытался сохранить ответы сервера и создать цикл, чтобы при получении правильных данных возвращало значение, но я действительно не знаю, как это сделать ...
Пожалуйста, помогите