📅  最后修改于: 2023-12-03 15:17:55.642000             🧑  作者: Mango
在 Node.js 中,socket.send() 方法用于向服务器或客户端发送数据。该方法是基于 UDP 协议实现的。
socket.send(msg, [offset, length], port, [host], [callback])
msg
:必需,要发送的数据,可以是 Buffer
类型、String
类型、TypedArray
类型、DataView
类型等。offset
:可选,数据在 Buffer
中的起始位置,默认为 0
。length
:可选,要发送数据的长度,默认为 msg
的长度。port
:必需,接收数据的端口号。host
:可选,接收数据的 IP 地址,默认为 localhost
。callback
:可选,数据发送完成后的回调函数,参数为 err
。socket.send() 方法没有返回值。
下面是一个简单的例子,创建一个 UDP 服务器和客户端,客户端向服务器发送一条消息,服务器接收到消息并发送一个反馈消息。
// 服务器端代码
const dgram = require('dgram');
const server = dgram.createSocket('udp4');
server.on('message', (msg, rinfo) => {
console.log(`服务器接收到:${msg} 来自 ${rinfo.address}:${rinfo.port}`);
const responseMsg = `收到反馈,数据长度为 ${msg.length}`;
server.send(responseMsg, rinfo.port, rinfo.address);
});
server.on('listening', () => {
const address = server.address();
console.log(`服务器已启动在 ${address.address}:${address.port}`);
});
server.bind(3000);
// 客户端代码
const dgram = require('dgram');
const client = dgram.createSocket('udp4');
const message = '这是一条消息';
client.send(message, 3000, 'localhost', (err) => {
if (err) throw err;
console.log('消息已发送至服务器');
});
client.on('message', (msg, rinfo) => {
console.log(`客户端接收到:${msg} 来自 ${rinfo.address}:${rinfo.port}`);
client.close();
});
需要注意的是,socket.send() 方法发送的数据包可能会被 IP 分片,因此需要在接收端进行数据重组。同时,UDP 协议本身并不保证数据传输的可靠性,因此在实际使用中需要考虑数据丢包等问题。