“Nodejs之TCP服务端与客户端聊天程序详解”是一篇关于使用Node.js编写TCP聊天程序的文章,完整攻略包括以下内容:
1. 环境搭建
首先,需要安装Node.js和npm。Node.js是一个基于JavaScript语言的服务器端运行环境,npm是Node.js的包管理工具。安装Node.js和npm后,可以使用npm安装必要的模块,如net模块、readline模块等。
2. 创建TCP服务器
使用Node.js内置的net模块可以很方便地创建一个TCP服务器。首先需要使用net.createServer()
方法创建一个服务器实例,然后监听连接请求,并在连接成功时创建一个socket对象进行通信,详细的代码如下:
const net = require('net');
// 创建一个TCP服务器
const server = net.createServer((socket) => {
console.log('客户端已连接');
// 监听socket的data事件,接收客户端发送的消息
socket.on('data', (data) => {
console.log(`客户端发来消息:${data.toString().trim()}`);
});
// 监听socket的end事件,客户端断开连接
socket.on('end', () => {
console.log('客户端已断开连接');
});
});
// 监听端口,开始接受连接请求
server.listen(8888, () => {
console.log('服务器正在监听8888端口');
});
3. 创建TCP客户端
使用net模块也可以创建TCP客户端,客户端需要建立与服务器的连接,并向服务器发送消息。代码如下:
const net = require('net');
// 创建一个TCP客户端
const client = net.createConnection({ port: 8888 }, () => {
console.log('已连接到服务器');
// 发送消息
client.write('Hello, server!');
});
// 监听server的data事件,接收服务器发送的消息
client.on('data', (data) => {
console.log(`服务器发来消息:${data.toString().trim()}`);
// 客户端发消息给服务器
client.write('Hello, server!');
});
// 监听server的end事件,服务器断开连接
client.on('end', () => {
console.log('服务器已断开连接');
});
4. 改进聊天程序
在上述的代码基础上,可以编写一个简单的聊天程序,客户端和服务器互相发送消息。具体代码如下:
服务器代码
const net = require('net');
const readline = require('readline');
// 创建一个TCP服务器
const server = net.createServer((socket) => {
console.log('客户端已连接');
// 监听socket的data事件,接收客户端发送的消息
socket.on('data', (data) => {
console.log(`客户端发来消息:${data.toString().trim()}`);
// 将接收到的消息群发给所有客户端
server.clients.forEach((client) => {
if (client !== socket && client.writable) {
client.write(`客户端${socket.remoteAddress}:${socket.remotePort}发来消息:${data.toString()}`);
}
});
});
// 监听socket的end事件,客户端断开连接
socket.on('end', () => {
console.log('客户端已断开连接');
// 将断开连接的客户端从列表中删除
const index = server.clients.indexOf(socket);
if (index >= 0) {
server.clients.splice(index, 1);
}
});
});
// 监听端口,开始接受连接请求
server.listen(8888, () => {
console.log('服务器正在监听8888端口');
});
// 创建读取终端输入的接口
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
prompt: '',
});
// 监听终端输入,将输入的内容广播给所有客户端
rl.on('line', (line) => {
server.clients.forEach((client) => {
if (client.writable) {
client.write(`广播:${line}`);
}
});
});
// 在服务器实例上添加一个clients列表,用于存储已经连接的客户端socket对象
server.clients = [];
客户端代码
const net = require('net');
const readline = require('readline');
// 创建一个TCP客户端
const client = net.createConnection({ port: 8888 }, () => {
console.log('已连接到服务器');
// 发送消息
client.write('Hello, server!');
});
// 监听server的data事件,接收服务器发送的消息
client.on('data', (data) => {
console.log(`服务器发来消息:${data.toString().trim()}`);
});
// 监听server的end事件,服务器断开连接
client.on('end', () => {
console.log('服务器已断开连接');
});
// 创建读取终端输入的接口
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
prompt: '',
});
// 监听终端输入,将输入的内容发送给服务器端
rl.on('line', (line) => {
client.write(line);
});
在聊天程序中,服务器端将接收到的消息广播给所有客户端,而客户端发送的消息也会被所有客户端收到,实现了简单的多人聊天功能。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Nodejs之TCP服务端与客户端聊天程序详解 - Python技术站