msg
{Buffer|TypedArray|DataView|string|Array} 要发送的消息。offset
{integer} 指定消息的开头在 buffer 中的偏移量。length
{integer} 消息的字节数。port
{integer} 目标端口。address
{string} 目标主机名或 IP 地址。callback
{Function} 当消息被发送时会被调用。
在 socket 上广播一个数据包。
对于无连接的 socket,必须指定目标的 port
和 address
。
对于连接的 socket,则将会使用其关联的远程端点,因此不能设置 port
和 address
参数。
msg
参数包含了要发送的消息。
根据消息的类型可以有不同的做法。
如果 msg
是一个 Buffer
、TypedArray
或 DataView
,则 offset
和 length
指定了消息在 Buffer
中对应的偏移量和字节数。
如果 msg
是一个String
,那么它会被自动地按照 'utf8'
编码转换为 Buffer
。
对于包含了多字节字符的消息,offset
和 length
会根据对应的[字节长度][byte length]进行计算,而不是根据字符的位置。
如果 msg
是一个数组,那么 offset
和 length
必须都不能被指定。
address
参数是一个字符串。
若 address
的值是一个主机名,则 DNS 会被用来解析主机的地址。
若 address
未提供或是非真值,则 '127.0.0.1'
(用于 udp4
socket)或 '::1'
(用于 udp6
socket)会被使用。
若在之前 socket 未通过调用 bind
方法进行绑定,socket 将会被一个随机的端口号赋值并绑定到“所有接口”的地址上(对于 udp4
socket 是 '0.0.0.0'
,对于 udp6
socket 是 '::0'
)。
可以指定一个可选的 callback
方法来汇报 DNS 错误或判断可以安全地重用 buf
对象的时机。
在 Node.js 事件循环中,DNS 查询会对发送造成至少一个时间点的延迟。
确定数据包被发送的唯一方式就是指定 callback
。
若在 callback
被指定的情况下有错误发生,该错误会作为 callback
的第一个参数。
若 callback
未被指定,该错误会以 'error'
事件的方式投射到 socket
对象上。
偏移量和长度是可选的,但如其中一个被指定则另一个也必须被指定。
另外,它们只在第一个参数是 Buffer
、TypedArray
或 DataView
的情况下才能被使用。
This method throws [ERR_SOCKET_BAD_PORT
][] if called on an unbound socket.
示例,发送 UDP 包到 localhost
上的某个端口:
const dgram = require('dgram');
const message = Buffer.from('一些字节');
const client = dgram.createSocket('udp4');
client.send(message, 41234, 'localhost', (err) => {
client.close();
});
示例,发送包含多个 buffer 的 UDP 包到 127.0.0.1
上的某个端口:
const dgram = require('dgram');
const buf1 = Buffer.from('一些 ');
const buf2 = Buffer.from('字节');
const client = dgram.createSocket('udp4');
client.send([buf1, buf2], 41234, (err) => {
client.close();
});
发送多个 buffer 的速度取决于应用和操作系统。 逐案运行基准来确定最佳策略。 但是一般来说,发送多个 buffer 速度更快。
示例,使用已连接的 socket 发送 UDP 包到 localhost
上的某个端口:
const dgram = require('dgram');
const message = Buffer.from('一些字节');
const client = dgram.createSocket('udp4');
client.connect(41234, 'localhost', (err) => {
client.send(message, (err) => {
client.close();
});
});