本文主要介绍了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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。