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

5
我正在尝试使用node.js编写一个应用程序,向具有udp服务器的设备发送udp请求,然后接收响应并显示它。该设备在其11220端口上接收请求后立即返回响应。
以下代码向设备发送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);

});

你的 message 处理程序从未运行?listening 运行了吗?如果在添加事件处理程序之后才 send,会发生什么? - loganfsmyth
1个回答

8

我刚才偶然看到这个问题,所以想提供一个答案:

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

});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接