Node.js UDP客户端处理来自udp服务器的响应

问题描述:

我正在尝试在node.js中写一个应用程序来向设备发送udp请求(它具有udp服务器),然后接收响应并显示它。该设备以这样的方式工作,即在其端口11220上接收到请求时立即返回响应。Node.js UDP客户端处理来自udp服务器的响应

下面的代码发送一个udp请求到设备,设备立即回应(我可以在wireshark中看到它),但我无法处理/显示恢复的消息。或者至少我只想在收到来自设备的回复时能够显示消息。请让我知道我的代码中缺少什么,或者向我展示完成代码。非常感谢。

同时,我不喜欢使用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

整个问题只是偶然,所以我想我应该管的一个答案:

在你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); 

});