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

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

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

另外,我不喜欢使用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); }); 

刚才偶然发现了这个问题,所以我想我会回答一个问题:

在你的client.send函数中,调用client.close(); 会closures你的服务器的UDP连接。 因此,如果您想收听留言,您不应在发送留言后立即致电留言。

其次,loganfsmyth的评论提供了一些很好的build议 – 你应该先添加你的事件处理程序,然后发送消息。

最后,这是为了让你的scheme工作所需的改变的代码

 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); });