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

时间:2013-12-20 21:49:20

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

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

});

1 个答案:

答案 0 :(得分:4)

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

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

});