【问题标题】:Node.js UDP client to handle a response from a udp serverNode.js UDP 客户端处理来自 udp 服务器的响应
【发布时间】:2014-01-09 20:06:55
【问题描述】:

我正在尝试在 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添加事件处理程序之后会发生什么。

标签: node.js sockets tcp udp client-server


【解决方案1】:

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

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

});

【讨论】:

    猜你喜欢
    • 2018-10-07
    • 2015-06-21
    • 1970-01-01
    • 2020-06-22
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多