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

C g*_*ics 3 sockets udp tcp client-server node.js

我正在尝试在 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);

});
Run Code Online (Sandbox Code Playgroud)

Sea*_*ean 6

只是偶然发现了这个问题,所以我想我会回答:

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

});
Run Code Online (Sandbox Code Playgroud)