nodejs简单实现TCP服务器端和客户端的聊天功能示例

请注意,本篇攻略需要基本掌握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技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • vite构建项目并支持微前端

    要使用vite构建项目并支持微前端,可以按照以下步骤进行: 第一步:初始化项目 npm init vite-app my-project 第二步:安装依赖 cd my-project npm install 第三步:按需加载 要支持微前端,需要让每个子应用按需加载,而vite正好支持这一特性。你可以在子应用的entry.js中,只导入本子应用需要的模块,而不…

    node js 2023年6月8日
    00
  • Nest 复杂查询示例解析

    Nest 复杂查询示例解析 简介 Nest 是一个基于 Node.js 平台的开发框架,它利用现代化的 JavaScript 技术为构建可伸缩的服务器端应用程序提供了一种优美且快速的方式。 在 Nest 中,ORM(对象关系映射)库 TypeORM 可以用于构建复杂的 SQL 查询,并通过 Nest 提供的数据访问对象(Data Access Object,…

    node js 2023年6月8日
    00
  • 深入理解JS异步编程-Promise

    深入理解JS异步编程-Promise 在JavaScript中,由于单线程的特点,异步编程是非常必要的。Promise是一种用于异步编程的解决方案,它可以让异步操作更加清晰、流畅,避免回调地狱的情况。本文将从Promise的基本用法、Promise链、Promise的一些方法等方面,对Promise进行深入讲解。 Promise的基本用法 Promise是一…

    node js 2023年6月8日
    00
  • 通过实例了解Nodejs模块系统及require机制

    让我来详细讲解“通过实例了解Nodejs模块系统及require机制”的完整攻略。我会通过两个示例来说明。 一、Node.js 模块系统 在 Node.js 中,模块是一个具有封装性和复用性的单位,它将包含 JavaScript 函数或对象的单个文件定义为独立的模块。这里我们通过一个实例来了解 Node.js 的模块系统。 首先,创建一个名为 math.js…

    node js 2023年6月8日
    00
  • node.js开发中使用Node Supervisor实现监测文件修改并自动重启应用

    下面是详细讲解“node.js开发中使用Node Supervisor实现监测文件修改并自动重启应用”的完整攻略。 简介 在 Node.js 开发中,我们经常需要修改代码并重新启动应用来查看效果,这个过程比较繁琐,而 Node Supervisor 出现就是为了简化这个过程,它可以监控文件修改并自动重启应用,让我们专注于代码编写。 安装 在使用 Node S…

    node js 2023年6月8日
    00
  • 浅谈Nodejs应用主文件index.js

    下面我来详细讲解“浅谈Nodejs应用主文件index.js”的完整攻略。 在Node.js中,应用程序的主要或入口文件通常被命名为index.js。这个文件是应用程序的主要控制器。在index.js文件中,定义和处理应用的各种功能。 下面就是index.js的基本结构: const express = require(‘express’); const a…

    node js 2023年6月8日
    00
  • node.js配置Token验证的2种方式总结

    当我们需要在Node.js应用程序中实现用户身份认证时,常用的一种方式是使用Token来验证用户。下面是两种常见的Node.js配置Token验证的方法: 方法一:使用jsonwebtoken库 首先需要安装jsonwebtoken库:npm install jsonwebtoken 在代码中引入jsonwebtoken库:const jwt = requi…

    node js 2023年6月8日
    00
  • Node.js图片处理库sharp的使用

    下面是关于Node.js图片处理库sharp使用的完整攻略。 简介 Sharp是一个由libvips图像处理库提供支持的快速、高效、功能丰富的Node.js图片处理库。它可以对图片进行缩放、裁剪、旋转等常见的操作,并且可以进行更进一步的高级处理,例如渐进式图片输出、代码优化等功能。 安装 首先需要通过npm安装sharp: npm install sharp…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部