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