请注意,本篇攻略需要基本掌握Node.js和TCP协议相关知识,以下是实现步骤及示例说明:
1.创建TCP服务器端
使用Node.js内置的net
模块创建TCP服务器端,代码如下:
const net = require('net');
const server = net.createServer((socket) => {
console.log(`客户端 ${socket.remoteAddress}:${socket.remotePort} 连接成功`);
socket.on('data', (data) => {
console.log(`从客户端 ${socket.remoteAddress}:${socket.remotePort} 收到数据:${data.toString()}`);
// 将收到的消息发送回客户端
socket.write(`服务器已收到消息:${data.toString()}`);
});
socket.on('close', () => {
console.log(`客户端 ${socket.remoteAddress}:${socket.remotePort} 断开连接`);
});
});
server.listen(8080, () => {
console.log(`TCP 服务器端已启动,监听端口 8080`);
});
以上代码中,使用net.createServer()
方法创建了一个TCP服务器端。当有客户端连接上来时,会触发connection
事件,并返回一个socket
对象。后续通过监听socket
对象的data
事件来获取客户端发送过来的数据,回复客户端的操作则通过调用socket.write()
方法进行。
2.创建TCP客户端
同样地,使用Node.js内置的net
模块创建TCP客户端,代码如下:
const net = require('net');
const client = net.createConnection({ port: 8080 }, () => {
console.log(`TCP 客户端已连接到服务器`);
});
client.on('data', (data) => {
console.log(`从服务器收到数据:${data.toString()}`);
});
client.on('close', () => {
console.log(`TCP 客户端已断开连接`);
});
// 获取用户输入并发送给服务器
process.stdin.on('data', (data) => {
client.write(data);
});
以上代码中,使用net.createConnection()
方法连接到指定端口的TCP服务器端。连接成功后,会触发connect
事件。后续通过监听client
对象的data
事件来获取服务器端发送过来的数据,同时使用process.stdin
来获取用户的输入。用户输入时触发data
事件,将输入的数据发送给服务器端则通过调用client.write()
方法进行。
3.实现TCP客户端和服务器端的聊天功能
将以上的代码整合起来,就可以实现TCP客户端和服务器端的聊天功能了。例如服务器端代码如下:
const net = require('net');
const server = net.createServer((socket) => {
console.log(`客户端 ${socket.remoteAddress}:${socket.remotePort} 连接成功`);
socket.on('data', (data) => {
console.log(`从客户端 ${socket.remoteAddress}:${socket.remotePort} 收到数据:${data.toString()}`);
// 将收到的消息发送回客户端
socket.write(`服务器已收到消息:${data.toString()}`);
});
socket.on('close', () => {
console.log(`客户端 ${socket.remoteAddress}:${socket.remotePort} 断开连接`);
});
});
server.listen(8080, () => {
console.log(`TCP 服务器端已启动,监听端口 8080`);
});
客户端代码如下:
const net = require('net');
const client = net.createConnection({ port: 8080 }, () => {
console.log(`TCP 客户端已连接到服务器`);
});
client.on('data', (data) => {
console.log(`从服务器收到数据:${data.toString()}`);
});
client.on('close', () => {
console.log(`TCP 客户端已断开连接`);
});
// 获取用户输入并发送给服务器
process.stdin.on('data', (data) => {
client.write(data);
});
开启服务器端后,可以使用终端启动多个客户端进行测试。在不同的终端输入消息,可以实现客户端和服务器端的聊天功能。
4.示例说明
示例一:简单聊天
在多个终端上启动客户端,输入不同的消息,则可以在各个终端上收到其他人发送过来的消息,实现简单的聊天功能。
例如,终端A输入消息Hello, World
后,终端B会收到类型如下的消息:
从服务器收到数据:服务器已收到消息:Hello, World
而在其他终端上也可以收到类似的消息。
示例二:模拟TCP客户端/服务器端通讯
学习TCP通讯过程中,我们往往需要模拟既有TCP客户端又有TCP服务器端的通讯过程。
你可以在同一计算机上启动两个进程,一个作为TCP服务器端,另一个作为TCP客户端。通过模拟实际客户端和服务器端的通讯过程,深入理解TCP通讯的实现过程。
例如,根据以上的示例一代码,启动TCP服务器端并在终端上输入任意消息。在另一个终端上启动TCP客户端并输入消息,可以在服务器端的终端和客户端的终端上都看到通讯过程中的输出信息,例如连接成功、消息收到/发送等。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:nodejs简单实现TCP服务器端和客户端的聊天功能示例 - Python技术站