,,Node.js API详解之 dgram模块用法实例分析

,,Node.js API详解之 dgram模块用法实例分析

本文主要介绍了dgram模块在Node.js API中的用法,并结合实例分析了Node.js API中dgram模块的基本功能、作用、使用方法和操作注意事项。有需要的可以参考一下。

目录

dgram . create socket(options[,callback])dgram . create socket(type[,callback]) dgram.socket类socket.bind([port][,address] [,Callback]) socket.bind (options [,Callback])监听事件错误事件消息事件socket . getrecvbuffersize()socket . setrecvbuffersize(size)socket . send(msg,[offset,length,] port [,address][,Callback])socket . getsendbuffersize()socket . setsendbuffersize分享给你,供你参考,如下:

Node.js API详细说明的Dgram

Dgram模块提供了UDP包套接字的实现。

使用以下方法报价:

const dgram=require(' dgram ');

dgram.createSocket(options[, callback])

描述:

创建一个dgram。套接字对象。一旦创建了套接字,调用socket.bind()将指示套接字开始监听数据报消息。

如果地址和端口没有传递给socket.bind(),

然后这个方法会将这个套接字绑定到一个“所有接口”地址的随机端口(这适用于udp4和udp6套接字)。

绑定的地址和端口可以通过socket.address()获得。地址和socket.address()端口。

选项:

类型:插座系列。必须是“UDP 4”或“UDP 6”。必需的。

Seaddr:如果设置为true socket.bind(),即使另一个进程已经绑定了一个套接字,该地址也将被重用。默认情况下为false。

RecvBufferSize:设置SO_RCVBUF的套接字值。

SendBufferSize:设置SO_SNDBUF的套接字值。

Lookup:常用的查询功能。默认值为dns.lookup()。

回调:绑定“”消息事件的侦听器。可选。

演示:

const dgram=require(' dgram ');

const server=dgram . create socket({ type:' UDP 4 ' },()={

console . log(` Server received:$ { msg } from $ { rinfo . address }:$ { rinfo . port } `);

});

server . bind(41234);

//服务器监听0.0.0: 41234

dgram.createSocket(type[, callback])

描述:

创建一个dgram。特定类型的套接字对象。类型参数是udp4或udp6。

传递可选的回调函数作为“”消息事件的侦听器。

演示:

const dgram=require(' dgram ');

const server=dgram . create socket(' UDP 4 ',()={

console . log(` Server received:$ { msg } from $ { rinfo . address }:$ { rinfo . port } `);

});

server . bind(41234);

dgram.Socket 类

描述:

dgram。Socket对象是一个封装了包函数的EventEmitter。

dgram。套接字实例由dgram.createSocket()创建。

您不需要使用new关键字来创建dgram的实例。(电源)插座

socket.bind([port][, address][, callback])

描述:

对于UDP套接字,此方法会导致dgram。套接字侦听指定端口和可选地址上的数据包信息。

如果未指定端口或者端口为0,操作系统将尝试绑定随机端口。

如果没有指定地址,操作系统将尝试监听所有地址。

当绑定完成时,将触发一个“listening”事件,并调用回调方法。

注意,在socket.bind()方法中同时监听' listening '事件并传入回调参数不会有什么坏处,但也不是很有用。

绑定的数据包套接字保持Node.js进程运行以接收数据包信息。

如果绑定失败,将触发“错误”事件。在极少数情况下(比如试图绑定一个封闭的套接字),会抛出一个错误。

演示:

const dgram=require(' dgram ');

const server=dgram . create socket(' UDP 4 ',()={

console . log(` Server received:$ { msg } from $ { rinfo . address }:$ { rinfo . port } `);

});

server.bind(41234,()={

常量地址=server . address();

Console.log(`服务器侦听$ { address . address }:$ { address . port } `);

});

//服务器监听0.0.0: 41234

socket.bind(options[, callback])

描述:

选项:{端口: ",地址:",独占:" }

对于UDP套接字,此方法会导致dgram。套接字侦听指定端口和可选地址上的数据包信息。

如果未指定端口或者端口为0,操作系统将尝试绑定随机端口。

如果没有指定地址,操作系统将尝试监听所有地址。

当绑定完成时,将触发一个“listening”事件,并调用回调方法。

使用dgram时。带有集群模块的Socket对象,options对象可能包含一个附加的exclusive属性。

当exclusive设置为false(默认值)时,集群工作单元将使用相同的套接字句柄来共享连接处理作业。

当exclusive设置为true时,将不共享句柄,尝试共享端口将导致错误。

绑定的数据报套接字将保持Node.js进程运行以接受数据报消息。

如果绑定失败,将生成“错误”事件。在极少数情况下(比如试图绑定一个封闭的套接字),可能会引发错误。

演示:

const dgram=require(' dgram ');

const server=dgram . create socket(' UDP 4 ',()={

console . log(` Server received:$ { msg } from $ { rinfo . address }:$ { rinfo . port } `);

});

server.bind({port: 41234},()={

常量地址=server . address();

Console.log(`服务器侦听$ { address . address }:$ { address . port } `);

});

//服务器监听0.0.0: 41234

listening 事件

描述:

当套接字开始侦听数据包信息时,将触发“侦听”事件。

创建UDP套接字后,将立即触发该事件。

演示:

const dgram=require(' dgram ');

const server=dgram . create socket(' UDP 4 ',()={

console . log(` Server received:$ { msg } from $ { rinfo . address }:$ { rinfo . port } `);

});

server.on('listening ',()={

常量地址=server . address();

Console.log(`服务器侦听$ { address . address }:$ { address . port } `);

});

server . bind({ port:41234 });

//服务器监听0.0.0: 41234

error 事件

描述:

当任何错误发生时,将触发“错误”事件。

当事件发生时,事件处理程序只接收一个错误参数。

演示:

const dgram=require(' dgram ');

const server=dgram . create socket(' UDP 4 ');

server.on('error ',(err)={

Console.log(`服务器异常:\ n $ { err . stack } `);

server . close();

});

server.on('message ',(msg,rinfo)={

console . log(` Server received:$ { msg } from $ { rinfo . address }:$ { rinfo . port } `);

});

server.on('listening ',()={

常量地址=server . address();

Console.log(`服务器侦听$ { address . address }:$ { address . port } `);

});

server . bind({ port:41234 });

message 事件

描述:

当套接字接收到新的数据包时,将触发“消息”事件。

Msg和rinfo作为参数传递给此事件的处理程序。

消息:消息

Rinfo:远程地址信息

地址:发件人的地址

系列:地址类型(“IPv4”或“IPv6”)

端口:发送方端口

大小:邮件大小

演示:

const dgram=require(' dgram ');

const server=dgram . create socket(' UDP 4 ');

server.on('message ',(msg,rinfo)={

console . log(` Server received:$ { msg } from $ { rinfo . address }:$ { rinfo . port } `);

});

server.on('listening ',()={

常量地址=server . address();

Console.log(`服务器侦听$ { address . address }:$ { address . port } `);

});

server . bind({ port:41234 });

socket.getRecvBufferSize()

描述:

套接字接收的字节大小。

演示:

server.on('message ',(msg,rinfo)={

Console.log(`服务器接收的字节数:$ { socket . getrecvbuffersize()} `);

});

socket.setRecvBufferSize(size)

描述:

设置SO_RCVBUF套接字选项。设置最大套接字接收缓冲字节。

演示:

const dgram=require(' dgram ');

const server=dgram . create socket(' UDP 4 ');

server . setrecvbuffersize(1024);

server.on('message ',(msg,rinfo)={

Console.log(`服务器接收的字节数:$ { socket . getrecvbuffersize()} `);

});

server . bind({ port:41234 });

socket.send(msg, [offset, length,] port [, address] [, callback])

描述:

在套接字上发送数据包。必须指定端口和地址。

msg参数包含要发送的消息。根据消息的类型,您可以采用不同的方式。

如果msg是Buffer或Uint8Array,那么offset和length指定消息在缓冲区中对应的偏移量和字节数。

如果msg是一个字符串,它会根据utf8编码自动转换成Buffer。

对于包含多字节字符的消息,偏移量和长度是根据对应的字节长度计算的,而不是根据字符的位置。

如果msg是一个数组,那么既不能指定偏移量也不能指定长度。

地址参数是一个字符串。如果address的值是主机名,将使用DNS解析主机的地址。

如果未提供地址或地址不正确,将使用“127.0.0.1”(对于udp4套接字)或“:1”(对于udp6套接字)。

如果套接字之前没有通过调用bind方法进行绑定,那么套接字将被分配一个随机端口号,并绑定到“所有接口”的地址(udp4套接字为“0.0.0.0”,udp6套接字为“:0”)。

您可以指定一个可选的回调方法来报告DNS错误或确定何时重用buf对象是安全的。

请注意,在Node.js事件循环中,DNS查询将导致至少1个tick的发送延迟。

确保数据包被发送的唯一方法是指定回调。如果在指定callback时发生错误,该错误将是callback的第一个参数。

如果未指定callback,错误将作为“错误”事件投射到套接字对象上。

偏移量和长度是可选的,但是如果指定了其中一个,另一个也必须指定。

此外,只有当第一个参数是Buffer或Uint8Array时,才能使用它们。

演示:

const dgram=require(' dgram ');

const server=dgram . create socket(' UDP 4 ');

const buf 1=buffer . from(' Some ');

const buf2=Buffer.from('字节');

server.on('error ',(err)={

Console.log(`服务器异常:\ n $ { err . stack } `);

server . close();

});

server.on('message ',(msg,rinfo)={

Console.log(`服务器接收的字节数:$ { socket . getrecvbuffersize()} `);

});

server.on('listening ',()={

常量地址=server . address();

Console.log(`服务器侦听$ { address . address }:$ { address . port } `);

});

server.send([buf1,buf2],8080,' localhost ');

server . bind({ port:41234 });

socket.getSendBufferSize()

描述:

套接字发送的字节大小。

演示:

server.send([buf1,buf2],8080,' localhost ',()={

Console.log('已发送消息的字节:',server . getsendbuffersize());

});

socket.setSendBufferSize(size)

描述:

设置SO_SNDBUF套接字选项。设置最大套接字发送缓冲字节。

演示:

const socket=dgram . create socket(' UDP 6 ');

socket.bind(1234,()={

socket . setsendbuffersize(1024);

});

socket.unref()

描述:

默认情况下,绑定套接字会阻止Node.js进程在套接字运行时退出。

socket.unref()方法用于从维护Node.js进程的引用列表中移除套接字。

您可以使用socket.ref()再次激活它。

socket.unref()方法返回对套接字的引用,因此可以在chain中调用它。

演示:

const dgram=require(' dgram ');

const socket=dgram . create socket(' UDP 6 ');

socket.bind(1234,()={

socket . unref();

});

socket.ref()

描述:

默认情况下,绑定套接字会阻止Node.js进程在套接字运行时退出。

socket.unref()方法用于从维护Node.js进程的引用列表中移除套接字。

socket.ref()方法用于将套接字重新添加到引用列表中,并恢复其默认行为。

多次调用socket.ref()不会产生额外的效果。

socket.ref()方法返回对套接字的引用,因此可以在chain中调用它。

演示:

const dgram=require(' dgram ');

const socket=dgram . create socket(' UDP 6 ');

socket.bind(1234,()={

socket . unref();

socket.ref()

});

socket.close([callback])

描述:

关闭套接字并停止侦听其上的数据。

如果提供了回调函数,就相当于为‘close’事件添加了一个监听器。

演示:

const dgram=require(' dgram ');

const socket=dgram . create socket(' UDP 6 ');

套接字.绑定(1234);

socket.close(()={

Console.log('套接字已关闭');

});

//套接字已关闭

close 事件

描述:

使用Close()关闭套接字后将触发“close”事件。

一旦触发此事件,此套接字上将不会触发新的“消息”事件。

演示:

const dgram=require(' dgram ');

const socket=dgram . create socket(' UDP 6 ');

套接字.绑定(1234);

socket.on('close ',()={

Console.log('套接字已关闭');

})

socket . close();

//套接字已关闭

socket.address()

描述:

返回包含套接字地址信息的对象。

对于UDP套接字,该对象将包含地址、系列和端口属性。

演示:

server.on('listening ',()={

常量地址=server . address();

Console.log(`服务器侦听$ { address . address }:$ { address . port } `);

});

socket.addMembership(multicastAddress[, multicastInterface])

描述:

通知内核通过套接字选项IP_ADD_MEMBERSHIP将multicastAddress和multicastInterface提供的多播集组合在一起。

如果未指定multicastInterface参数,操作系统将选择一个接口并向其添加成员。

若要向所有可用接口添加成员,可以在每个接口上调用一次addMembership方法。

socket.dropMembership(multicastAddress[, multicastInterface])

描述:

引导内核通过socket选项IP_DROP_MEMBERSHIP删除multicastAddress指定的组播集。

当套接字关闭或者进程终止时,这个方法会被内核自动调用,所以大部分应用不用自己调用这个方法。

如果未指定multicastInterface,操作系统将尝试删除所有可用接口上的成员。

socket.setBroadcast(flag)

描述:

或者设置清除SO_BROADCAST套接字选项。

设置为true时,UDP数据包可以发送到本地接口的广播地址。

socket.setMulticastLoopback(flag)

描述:

或者将IP_MULTICAST_LOOP套接字选项设置为clear。当设置为真时,多播数据包也将在本地接口上接收。

socket.setMulticastTTL(ttl)

描述:

设置IP_MULTICAST_TTL套接字选项。一般来说,TTL代表“生存时间”。这是指传输IP数据包时允许的最大跳数,尤其是对于多播传输。

IP数据包每通过一个路由或网关,TTL值就减1。如果它通过一条路由,TTL值就降为0,所以它不会继续传输。

传递给socket.setMulticastTTL()的参数是0-255范围内的跳数。大多数系统的默认值是1,但是可以更改。

socket.setTTL(ttl)

描述:

设置IP_TTL套接字选项。一般来说,TTL代表“生存时间”,特指一个IP包传输时允许的最大跳数。

IP数据包每通过一个路由或网关,TTL值就减1。如果它通过一条路由,TTL值就降为0,所以它不会继续传输。

通常,TTL值会针对网络嗅探或多播进行修改。

传递给socket.setTTL()的参数是0-255范围内的跳数。大多数系统的默认值是1,但是可以更改。

希望这篇文章对大家的node.js编程有所帮助。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: