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日

相关文章

  • 利用NPM淘宝的node.js镜像加速nvm

    当我们在国内使用NVM(Node Version Manager)来管理Node.js的版本时,下载Node.js的速度很慢,甚至很难下载下来,因为官方的Node.js下载可能需要访问到国外的服务器。 为了解决这个问题,我们可以使用淘宝镜像提供的Node.js二进制包。下面是具体步骤: 步骤一:安装NVM 在命令行(terminal)运行以下命令安装NVM:…

    node js 2023年6月8日
    00
  • 一文秒懂nodejs中的异步编程

    一文秒懂Node.js中的异步编程 什么是异步编程 JavaScript是一种单线程的编程语言,它只能在一个线程中处理事件,并按照顺序执行代码。当在执行某个任务时,如果需要等待某个结果返回,传统的写法是阻塞该线程,直到结果返回后才继续执行下一步。这种方式的缺点是效率低下,因为大部分时间都是在等待,浪费了CPU的处理能力。 异步编程的思想就是在等待某个结果返回…

    node js 2023年6月8日
    00
  • Python实现同时兼容老版和新版Socket协议的一个简单WebSocket服务器

    实现同时兼容老版和新版Socket协议的简单WebSocket服务器,需要使用Python的WebSocket库。目前Python中主流的WebSocket库有三个:websocket、websockets和tornado,其中websocket库目前已经停止更新,所以本文选择使用较为实用的websockets库来实现。 下面是具体的实现攻略: 准备工作 在…

    node js 2023年6月8日
    00
  • NodeJS 实现多语言的示例代码

    这里提供的多语言实现方案是基于Node.js平台的web应用程序,其具体实现可分为以下几个部分。 1. 多语言模块选型 Node.js平台的多语言模块推荐选用i18next模块。i18next是一个非常流行的i18n(国际化)框架,它支持多种语言,提供了各种特性和插件如数据格式化等,非常易于使用。该模块可通过npm安装: npm install i18nex…

    node js 2023年6月8日
    00
  • Nodejs Post请求报socket hang up错误的解决办法

    下面我将为你详细讲解“Nodejs Post请求报socket hang up错误的解决办法”。 问题分析 当使用Nodejs发送Post请求时,可能会出现“socket hang up”错误,造成请求失败。这个错误通常发生在以下情况之一: 请求超时,服务器没有及时响应。 请求的数据量比较大,Nodejs默认的请求体大小限制被超出。 请求时发生了错误,导致请…

    node js 2023年6月8日
    00
  • Node实现前端本地开发接口代理服务

    下面是关于“Node实现前端本地开发接口代理服务”完整攻略的详细说明。 什么是接口代理服务 前端开发过程中,常常需要请求后端接口获取数据。但是在本地开发环境中,由于前后端不在同一个服务器上,经常会遇到跨域问题。为了解决这个问题,我们可以使用接口代理服务。 接口代理服务,指将前端开发环境中的某个 API 请求转发到真实的后端 API 服务器上,并将其响应结果返…

    node js 2023年6月8日
    00
  • JavaScript利用crypto模块实现加解密

    JavaScript利用crypto模块实现加解密的完整攻略,包含以下步骤: 1. 引入crypto模块 在Node.js中,使用crypto模块来实现加解密操作。可以使用以下代码引入crypto模块: const crypto = require(‘crypto’); 2. 生成密钥 在加解密过程中,需要使用密钥来实现加密和解密操作。可以使用crypto模…

    node js 2023年6月8日
    00
  • NodeJs在Linux下使用的各种问题解决

    Node.js在Linux下使用的各种问题解决攻略 Node.js是一种在Linux操作系统上运行的JavaScript运行时环境。然而,在使用Node.js时,用户可能会遇到各种问题。本文将介绍使用Node.js时可能遇到的各种问题,并提供解决方法。 各种问题解决方法 问题1:安装Node.js失败 如果在安装Node.js时遇到问题,可以使用以下方法解决…

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