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

“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日

相关文章

  • Node升级后vue项目node-sass报错问题及解决

    针对该问题,下面给出详细的解决攻略: 问题描述 在升级 Node 版本后,运行 Vue 项目时,可能会出现以下报错: Error: Node Sass could not find a binding for your current environment: Windows 64-bit with Node.js 12.x Found bindings f…

    node js 2023年6月8日
    00
  • js实现遍历含有input的table实例

    实现表格中input元素的遍历,可以使用JavaScript DOM API完成。DOM API是JavaScript操作HTML结构中的内容的方法和属性集合。以下是几个实现遍历含有input的table的示例: 方法一:使用querySelectorAll 可以使用 document.querySelectorAll() 方法查找表格中的所有 input …

    node js 2023年6月8日
    00
  • Node.js利用断言模块assert进行单元测试的方法

    下面我就为您详细讲解一下“Node.js利用断言模块assert进行单元测试的方法”的完整攻略。 一、什么是单元测试 单元测试是指对软件中的最小可测试单元进行检查和验证的活动,这个最小可测试单元一般是指一个函数或类。 二、使用 Node.js 的 assert 模块进行单元测试 在 Node.js 中有一个 assert 模块,它是一个简单而有效的单元测试工…

    node js 2023年6月8日
    00
  • node.js入门教程之querystring模块的使用方法

    下面是“node.js入门教程之querystring模块的使用方法”的完整攻略。 一、querystring模块的基本介绍 querystring 模块是 Node.js 中内置的一个提供了一些实用工具的模块,可以用来进行 URL 查询字符串的解析和序列化,常用于处理 HTTP 请求和响应中的参数。 二、querystring模块常用方法 1. query…

    node js 2023年6月8日
    00
  • NodeJS搭建HTTP服务器的实现步骤

    下面是详细的NodeJS搭建HTTP服务器的实现步骤攻略。 确定需求 在开始编写任何代码之前,我们需要先确定需要实现的HTTP服务器的基本需求。基本的需求可能包括: 能够处理HTTP GET请求 能够处理HTTP POST请求 能够处理HTTP头文件 支持静态文件服务 支持路由功能 实现这些需求的方法是编写一个基本的HTTP服务器,这个服务器能够监听请求,解…

    node js 2023年6月8日
    00
  • 10个最优秀的Node.js MVC框架

    以下是“10个最优秀的Node.js MVC框架”的完整攻略。 1. MVC框架简介 MVC是一种设计模式,将应用程序分为三个部分:模型(model)、视图(view)和控制器(controller)。它是一种简化的开发方法,有利于代码的复用、组织和测试。Node.js MVC框架是基于MVC设计模式构建的框架,它们都有自己的特定功能和优点。 2. 常用的N…

    node js 2023年6月8日
    00
  • Node.js中path.join()优势例举分析

    “Node.js中path.join()优势例举分析”攻略: 什么是path.join()? 在Node.js中,path模块是对文件路径进行操作的模块,常用的操作有:路径拼接、解析、返回绝对路径、返回相对路径等。其中,path.join()是将路径片段通过特定的分隔符连接起来形成路径的方法。 语法格式: path.join([…paths]) …p…

    node js 2023年6月8日
    00
  • React+EggJs实现断点续传的示例代码

    下面是对实现”React+EggJs实现断点续传的示例代码”的完整攻略。 简介 断点续传是指在上传或下载大文件时,当网络连接中断或者出现其他问题时,可以保证文件的上传或下载不会从头开始,而是从中断的位置继续进行。 本文将通过React + Egg JS框架实现断点续传功能,具体实现过程会在下面的代码示例中讲解。 技术栈 前端:React 后端:Egg JS(…

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