Node 中数据报的一点疑问◔ ‸◔?
问题
对于 dgram.Socket
类的 send()
方法中第五个参数 address
不太理解。官方API中的描述:
目标主机名或IP地址。
在 udp_server.js 文件中,server.send(..., rinfo.address);
的 rinfo.address
代表远程发送方的地址。这句就可以理解为,向远程地址(发送请求的IP) rinfo.address
发送 message
。这与 API 中的解释可以关联上。
但是在 udp_client.js 文件中,server.send(..., '230.1.2.3');
的 230.1.2.3
如果是目标主机名或IP地址的话应该是 'localhost' 吧? 230.1.2.3
实际是 udp_server.js 中要多播的目标地址之一,也就是接收多播消息的接收地址之一。怎么会作为 server.send()
方法的 'address' 参数呢?
代码
udp_server.js
var server = require('dgram').createSocket('udp4');
var port = 4000;
server.on('message', function (message, rinfo) {
console.log('server got message: ' + message, rinfo);
server.send(message, 0, message.length, rinfo.port, rinfo.address);// 向发送端发回消息
});
server.on('error', function (err) {
console.log(err);
})
server.bind(port, function () {
server.addMembership('230.1.2.3');// 接收来自多播地址 230.1.2.3 的多播信息。
});
udp_client.js
var client = require('dgram').createSocket('udp4');
var message = new Buffer('a message');
client.on('message',function(message) {
console.log(message.toString());
})
client.bind(4001, function () {
client.setMulticastTTL(10);
client.send(message, 0, message.length, 4000, '230.1.2.3', function (err, bytes) {
console.log(err);
});
});
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论