NodeJS 网络 UDP dgram
模块概览
dgram 模块是对 UDP socket 的一层封装,相对 net 模块简单很多,下面看例子。
UDP 客户端 vs UDP 服务端
首先,启动 UDP server,监听来自端口 33333 的请求。
server.js
// 例子:UDP 服务端
var PORT = 33333;
var HOST = '127.0.0.1';
var dgram = require('dgram');
var server = dgram.createSocket('udp4');
server.on('listening', function () {
var address = server.address();
console.log('UDP Server listening on ' + address.address + ":" + address.port);
});
server.on('message', function (message, remote) {
console.log(remote.address + ':' + remote.port +' - ' + message);
});
server.bind(PORT, HOST);
然后,创建 UDP socket,向端口 33333 发送请求。
client.js
// 例子:UDP 客户端
var PORT = 33333;
var HOST = '127.0.0.1';
var dgram = require('dgram');
var message = Buffer.from('My KungFu is Good!');
var client = dgram.createSocket('udp4');
client.send(message, PORT, HOST, function(err, bytes) {
if (err) throw err;
console.log('UDP message sent to ' + HOST +':'+ PORT);
client.close();
});
运行 server.js。
node server.js
运行 client.js。
➜ 2016.12.22-dgram git:(master) ✗ node client.js
UDP message sent to 127.0.0.1:33333
服务端打印日志如下
UDP Server listening on 127.0.0.1:33333
127.0.0.1:58940 - My KungFu is Good!
广播
通过 dgram 实现广播功能很简单,服务端代码如下。
var dgram = require('dgram');
var server = dgram.createSocket('udp4');
var port = 33333;
server.on('message', function(message, rinfo){
console.log('server got message from: ' + rinfo.address + ':' + rinfo.port);
});
server.bind(port);
接着创建客户端,向地址'255.255.255.255:33333'进行广播。
var dgram = require('dgram');
var client = dgram.createSocket('udp4');
var msg = Buffer.from('hello world');
var port = 33333;
var host = '255.255.255.255';
client.bind(function(){
client.setBroadcast(true);
client.send(msg, port, host, function(err){
if(err) throw err;
console.log('msg has been sent');
client.close();
});
});
运行程序,最终服务端打印日志如下
➜ 2016.12.22-dgram git:(master) ✗ node broadcast-server.js
server got message from: 192.168.0.102:61010
相关链接
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: NodeJS 网络 TCP net
下一篇: 彻底找到 Tomcat 启动速度慢的元凶
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论