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启动客户端,可同时启动多个
会在服务端和其他客户端开到这个客户端的输入内容
时间: 2024-10-23 04:11:22