Nodejs之TCP服务端与客户端聊天程序详解

yizhihongxing

“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技术站

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

相关文章

  • Vue3.0中的monorepo管理模式的实现

    Vue 3.0采用了monorepo管理模式,它允许开发者在一个代码仓库中管理多个相关项目,有效提高了资源的可复用性和管理效率。下面是实现Vue3.0中的monorepo管理模式的完整攻略。 创建monorepo仓库 首先,我们需要创建一个monorepo仓库用于存放多个相关项目。可以选择使用GitHub或者GitLab等平台的仓库,也可以使用本地Git仓库…

    node js 2023年6月9日
    00
  • nw.js实现类似微信的聊天软件

    要实现类似微信的聊天软件,可以使用nw.js来构建跨平台应用程序。下面是实现的完整攻略: 准备工作 下载安装node.js,然后在命令行工具中输入以下命令,检查是否安装成功。 node -v npm -v 下载安装nw.js,并解压到本地文件夹,用于后续开发。 创建工程 在本地空文件夹中创建package.json文件,用于管理开发依赖。 { "n…

    node js 2023年6月8日
    00
  • Node 切片拼接及地图导出实例详解

    Node 切片拼接及地图导出实例详解 本文将介绍如何使用 Node.js 实现切片拼接和地图导出功能。 准备工作 在开始操作之前,需要先安装以下两个模块: gm:该模块用于处理图像,可以用来进行图像拼接。 mapnik:该模块为 Node.js 提供了一个与 Mapnik 库交互的接口,可以用来生成地图。 可以使用以下命令行进行安装: npm install…

    node js 2023年6月8日
    00
  • 利用node.js开发cli的完整步骤

    利用node.js开发CLI,一般分为以下几个步骤: 步骤一:创建项目 首先,我们需要创建一个新的npm项目,可以通过命令行执行以下代码: mkdir my-cli cd my-cli npm init 其中,npm init命令会引导你创建一个新的package.json文件,其中包含项目的名称、版本等信息。在这个过程中,你可以自定义项目的名称、版本等信息…

    node js 2023年6月8日
    00
  • Node.js连接数据库实现过程详解

    下面我来详细讲解 “Node.js连接数据库实现过程详解” 的完整攻略。 一、Node.js连接数据库的几个必要步骤 1. 安装数据库驱动 Node.js 默认不带数据库驱动,需要根据需要安装特定的驱动。比如常用的 MySQL 数据库,我们可以使用 mysql 驱动: $ npm install mysql –save 2. 引入相关模块 在代码中引入所需…

    node js 2023年6月8日
    00
  • 根据配置文件加载js依赖模块

    加载 JS 依赖模块是一个非常常见的需求。通过配置文件加载 JS 依赖模块可以使你的代码方便地管理和维护。下面是加载 JS 依赖模块的完整攻略。 第一步:安装依赖项 在使用配置文件加载 JS 依赖模块之前,你需要安装一个模块管理器,例如 require.js 或者 webpack。 以 require.js 为例,你可以通过以下命令安装: npm insta…

    node js 2023年6月8日
    00
  • Node绑定全局TraceID的实现方法

    Node.js是一个事件驱动、异步I/O的开源服务器端JavaScript运行环境。在分布式系统中,为了追踪一次请求在微服务架构中的整个链路,我们需要为每一次请求分配一个唯一的全局Trace ID,并将Trace ID在所有的请求处理节点中进行传递。Node.js中如何绑定全局Trace ID呢?本文将详细介绍这一问题的解决方案。 需求分析 在Node.js…

    node js 2023年6月8日
    00
  • nodejs更新package.json中的dependencies依赖到最新版本的方法

    更新package.json中的dependencies依赖到最新版本的方法有多种途径,下面我将一一列举。 方法一:使用npm命令更新 通过使用npm命令,我们可以快速更新package.json中dependencies依赖库的版本。步骤如下: 打开终端进入项目根目录。 使用以下命令更新所有依赖: npm update 或者指定某个依赖更新: npm up…

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