UDP(dgram)数据报
dgram模块提供了 UDP 数据包 socket 的实现。
原网页:http://nodejs.cn/api/dgram.htm
引入:
const dgram = require('dgram'); 或 var dgram = require('dgram');
相关事件:
listening:当服务器开始监听请求时,触发该事件
message:当server接收到新消息时执行回调
close:当客户端连接调用close()时,执行该回调函数
error:监听server是否出现异常
1 const dgram = require('dgram'); 2 const server = dgram.createSocket('udp4'); 3 4 server.on('error', (err) => { 5 console.log(`服务器异常:\n${err.stack}`); 6 server.close(); 7 }); 8 9 server.on('message', (msg, rinfo) => { 10 console.log(`服务器收到:${msg} 来自 ${rinfo.address}:${rinfo.port}`); 11 }); 12 13 server.on('listening', () => { 14 const address = server.address(); 15 console.log(`服务器监听 ${address.address}:${address.port}`); 16 }); 17 18 server.bind(41234); 19 // 服务器监听 0.0.0.0:41234
创建:
-
dgram.createSocket(type[, callback])
>>>type - 'udp4' 或 'udp6'.
callback - 为 'message' 事件添加一个监听器。
一旦套接字被创建。调用socket.bind() 会指示套接字开始监听数据报消息。
绑定的地址和端口可以通过 socket.address().address 和socket.address().port 来获取。
绑定:
-
socket.bind([port][, address][, callback])
该方法会令dgram.Socket在指定的port和可选的address上监听数据包信息。若port未指定或为 0,操作系统会尝试绑定一个随机的端口。若address未指定,操作系统会尝试在所有地址上监听。绑定完成时会触发一个'listening'事件,并会调用callback方法。
发送数据:
-
socket.send(msg, [offset, length,] port [, address] [, callback])
>>>msg:要发送的数据 <Buffer> | <Uint8Array> | <string> | <Array>
offset:消息开头偏移量
length:消息的字节数
port:目标端口
address:目标主机名或ip地址
callback:消息被发送时执行
1 const dgram = require('dgram'); 2 const message = Buffer.from('Some bytes'); 3 const client = dgram.createSocket('udp4'); 4 client.send(message, 41234, 'localhost', (err) => { 5 client.close(); 6 });
关闭:
-
socket.close([callback])
关闭该 socket 并停止监听其上的数据。如果提供了一个回调函数,它就相当于为'close'事件添加了一个监听器。
socket.address()
返回一个包含 socket 地址信息的对象。对于 UDP socket,该对象将包含address、family和port属性。
socket.unref()
默认情况下,只要socket是打开的,绑定一个socket将导致它阻塞Node.js进程退出。使用socket.unref()方法可以从保持Node.js进程活动的引用计数中排除socket,从而允许进程退出,尽管这个socket仍然在侦听。多次调用socket.unref()方法将不会有任何新增的作用。

浙公网安备 33010602011771号