2013-12-20 4 views
1

Я пытаюсь написать приложение в node.js, чтобы отправить запрос udp на устройство (имеющее udp-сервер), а затем получить ответ и отобразить его. Устройство работает таким образом, что после получения запроса на своем порту 11220 он немедленно возвращает ответ.Node.js UDP-клиент для обработки ответа с сервера udp

Приведенный ниже код отправляет запрос udp устройству и ответы устройства сразу (я вижу это в wirehark), но я не могу обрабатывать/отображать восстановленное сообщение. Или, по крайней мере, я просто хочу иметь возможность отображать сообщение после получения ответа от устройства. Пожалуйста, дайте мне знать, чего не хватает в моем коде, или покажите мне полный код, чтобы сделать это. Очень ценится.

Как хорошо, я не предпочитаю использовать socket.io и т.д.

var PORT = 11220 ; 
var HOST = '192.168.1.111'; 

var dgram = require('dgram'); 
var message = new Buffer(9); 
var client = dgram.createSocket('udp4'); 
client.send(message, 0, message.length, PORT, HOST, function(err, bytes) { 
    if (err) throw err; 
    console.log('UDP message sent to ' + HOST +':'+ PORT); 
    client.close(); 

}); 


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

client.on('message', function (message, remote) { 
    // CAN I HANDLE THE RECIVED REPLY HERE???? 
    console.log(remote.address + ':' + remote.port +' - ' + message); 

}); 
+0

Так что ваш 'message' обработчик никогда не работать? Выполняется ли «прослушивание»? Что произойдет, если вы «отправили» только * после * добавления обработчиков событий. – loganfsmyth

ответ

2

Просто наткнулся на вопрос, так что я думал, что я в трубку с ответом:

В вашей client.send функции , вызов client.close(); закроет ваше соединение UDP с сервером. Поэтому, если вы хотите слушать сообщения, вы не должны вызывать это сразу же после отправки вашего сообщения.

Во-вторых, комментарий loganfsmyth содержит некоторые полезные советы - сначала вы должны добавить обработчики событий, а затем отправить сообщение.

В конце концов, это был измененный код нужен, чтобы ваш сценарий работал

var client = dgram.createSocket('udp4'); 

client.on('listening', function() { 
    var address = client.address(); 
    console.log('UDP Server listening on ' + address.address + ":" + address.port); 
}); 

client.on('message', function (message, remote) { 

    console.log(remote.address + ':' + remote.port +' - ' + message); 

}); 

client.send(message, 0, message.length, PORT, HOST, function(err, bytes) { 

    if (err) throw err; 
    console.log('UDP message sent to ' + HOST +':'+ PORT); 

}); 
Смежные вопросы