Node.js的net模块
net模块提供了一个异步网络包装器,用于TCP网络编程,它包含了创建服务器和客户端的方法
创建TCP服务器
net.createServer
方法
创建客户端去连接服务器
net.connect
方法
简易聊天室服务端
chatServer.js
var net = require('net'); // 创建TCP服务器 var server = net.createServer(); // 存储所有客户端socket var sockets = []; //接收客户端连接请求 server.on('connection', function(socket) { console.log('Got a new connection'); sockets.push(socket); //获取客户端发送过来的数据 socket.on('data', function(data) { console.log('Got data: ', data); //服务器广播数据,把来自客户端的数据转发送给其他所有客户端 sockets.forEach(function(otherSocket) { if (otherSoecket !== socket) { otherSocket.write(data); } }); ]); // 把关闭连接的客户端从服务器广播列表中给删除掉 socket.on('close', function() { console.log('A client connection closed'); var index = sockets.indexOf(socket); sockets.splice(index, 1); }); }); server.on('error', function(err) { console.log('Server error: ', err.message); }); // 监听客户端断开连接事件 server.on('close', function() { console.log('Server closed'); }); // 启动服务 server.listen(8080);
简易聊天室客户端
var net = require('net'); process.stdin.resume(); process.stdin.setEncoding('utf8'); // 连接服务器 var client = net.connect({ port: 8080 }, function() { console.log('Connected to server'); // 获取输入的字符串 console.log('input: '); process.stdin.on('data', function(data) { // 发送输入的字符串到服务器 console.log('input: '); client.write(data); // 输入 'close' 字符串时关闭连接 if (data === 'close\n') { client.end(); } }); }); // 获取服务端发送过来的数据 client.on('data', function(data) { console.log('Other user\'s input', data.toString()); }); // 断开连接 client.on('end', function() { console.log('Disconnected from server'); // 退出客户端程序 process.exit(); });
process是一个Node.js的全局模块
process.stdin
用于获取来自标准输入的可读流
执行node chatServer.js启动服务端
执行node chatClient.js启动客户端,可同时启动多个
会在服务端和其他客户端开到这个客户端的输入内容
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)