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,该对象将包含addressfamilyport属性。

 

socket.unref()

默认情况下,只要socket是打开的,绑定一个socket将导致它阻塞Node.js进程退出。使用socket.unref()方法可以从保持Node.js进程活动的引用计数中排除socket,从而允许进程退出,尽管这个socket仍然在侦听。多次调用socket.unref()方法将不会有任何新增的作用。

 

posted @ 2018-08-19 20:02  wyr_blog  阅读(653)  评论(0)    收藏  举报