it编程 > 前端脚本 > Node.js

Node.js net模块详解(含类、方法、事件)

2人参与 2025-04-24 Node.js

node.js 的 net 模块提供了基于 tcp 或 ipc 的网络通信能力,用于创建服务器和客户端。以下是 net 模块的核心 api 详解,包含类、方法、事件及示例。

1. 模块引入

const net = require('net');

2. 核心类与方法

2.1 net.server 类

用于创建 tcp 或 ipc 服务器。

方法

server.listen(port[, host][, backlog][, callback])
监听指定端口和主机。

const server = net.createserver();
server.listen(3000, '127.0.0.1', () => {
  console.log('server listening on port 3000');
});

server.listen(path[, callback])
监听 ipc 路径(仅 unix 系统支持)。

server.close([callback])
停止服务器接受新连接,关闭现有连接后触发回调。

server.address()
返回服务器绑定的地址信息({ port, address, family }),未监听时返回 null

事件

'connection'
当有新客户端连接时触发,回调参数为 socket 对象。

server.on('connection', (socket) => {
  console.log('new client connected');
});

'listening'
服务器开始监听时触发。

'close'
服务器关闭后触发。

'error'
发生错误时触发(如端口被占用)。

2.2 net.socket 类

表示 tcp 或 ipc 的客户端或服务器端连接。

方法

socket.connect(port[, host][, connectlistener])
连接到指定端口和主机。

const client = new net.socket();
client.connect(3000, '127.0.0.1', () => {
  console.log('connected to server');
});

socket.write(data[, encoding][, callback])
发送数据到另一端。

socket.end([data][, encoding])
半关闭连接(发送 fin 包),可选发送最后一段数据。

socket.destroy()
强制销毁连接,触发 'close' 事件。

socket.pause() / socket.resume()
暂停/恢复接收数据(控制 'data' 事件触发)。

socket.settimeout(timeout[, callback])
设置连接超时时间(毫秒),超时后触发回调并自动销毁连接。

socket.settimeout(3000, () => {
  console.log('socket timed out');
  socket.destroy();
});

socket.setnodelay([nodelay])
禁用 nagle 算法(nodelay=true),降低延迟,适用于高频小数据包场景。

属性

事件

'data'
接收到数据时触发,回调参数为 bufferstring

socket.on('data', (data) => {
  console.log('received:', data.tostring());
});

'connect'
连接成功建立时触发。

'end'
另一端发送 fin 包(结束连接)时触发。

'close'
连接完全关闭后触发。

'timeout'
连接超时时触发(需配合 settimeout 使用)。

'error'
发生错误时触发(如连接被重置)。

2.3 工具函数

net.createserver([options][, connectionlistener])
快速创建服务器,等同于 new net.server() + server.on('connection')

const server = net.createserver((socket) => {
  socket.write('welcome to the server!');
});

net.connect(port[, host][, connectlistener])
创建客户端并连接到服务器,返回 net.socket 对象。

const client = net.connect(3000, 'localhost', () => {
  client.write('hello from client!');
});

net.isip(input)
判断输入是否为 ip 地址,返回 4(ipv4)、6(ipv6)或 0(无效)。

net.isip('192.168.1.1'); // 4
net.isip('::1');         // 6
net.isip('hello');       // 0

net.isipv4(input) / net.isipv6(input)
判断输入是否为 ipv4 或 ipv6 地址,返回布尔值。

3. 完整示例 tcp 服务器

const net = require('net');
const server = net.createserver((socket) => {
  console.log('client connected');
  socket.on('data', (data) => {
    console.log('received:', data.tostring());
    socket.write('echo: ' + data);
  });
  socket.on('end', () => {
    console.log('client disconnected');
  });
});
server.listen(3000, '127.0.0.1', () => {
  console.log('server listening on port 3000');
});

tcp 客户端

const net = require('net');
const client = net.connect(3000, '127.0.0.1', () => {
  client.write('hello server!');
});
client.on('data', (data) => {
  console.log('server response:', data.tostring());
  client.end();
});
client.on('end', () => {
  console.log('disconnected from server');
});

4. 关键注意事项

通过掌握这些 api,可以构建高效的 tcp 服务器和客户端,适用于实时通信、微服务等场景。

到此这篇关于node.js net模块详解的文章就介绍到这了,更多相关node.js net模块内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

Node.js 数据库 CRUD 项目示例详解(完美解决方案)

04-24

使用Node.js获取电脑配置信息的实现方法(CPU型号、内存大小、磁盘类型等)

04-24

Node.js进行文件读取与复制的系统总结

04-24

使用Node.js制作图片上传服务的详细教程

04-24

使用Node.js实现GitHub登录功能

04-24

使用NVM下载Node.js管理多版本的详细教程(附图文)

04-24

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论