node.js使用net模块创建服务器和客户端示例【基于TCP协议】

yizhihongxing

下面是详细讲解“node.js使用net模块创建服务器和客户端示例【基于TCP协议】”的完整攻略:

一、net模块简介

Node.js中的net模块提供了基于TCP或IPC(进程间通信)协议的网络通信功能,包括创建服务器和客户端等功能。在这里主要介绍基于TCP协议的创建服务器和客户端。

二、创建TCP服务器

要创建一个TCP服务器,需要调用net模块的createServer方法,并传入一个回调函数来处理连接。回调函数的参数有两个,分别是表示连接的socket对象,和一个可选的表示连接来源的对象。以下是一个简单的TCP服务器的示例代码:

const net = require('net');

const server = net.createServer((socket) => {
  // 接收到客户端连接请求时会执行这里的代码
  console.log('客户端已连接');
  // 处理连接
  // ...
});

server.listen(8080, () => {
  console.log('服务器已启动');
});

运行上述代码后,终端会显示“服务器已启动”,这时就可以通过其它客户端程序或命令行工具等去连接这个服务器。

三、连接TCP服务器

要连接一个TCP服务器,需要调用net模块的connect方法:

const net = require('net');

const client = net.connect({
  host: '127.0.0.1', // 服务器IP地址
  port: 8080 // 服务器端口号
}, () => {
  console.log('已连接到服务器');
});

// 处理连接
// ...

这里的connect方法接收一个配置对象,包括服务器的IP地址和端口号等参数。接着可以对连接进行处理。

四、实现简单的聊天室

下面通过一个简单的聊天室示例来说明TCP服务器和客户端的使用。

1. 服务端代码

const net = require('net');

const clients = []; // 存储客户端socket对象的数组

const server = net.createServer((socket) => {
  // 连接时添加socket到clients数组中,表示客户端已在线
  clients.push(socket);

  // 以客户端IP地址为昵称
  const nickname = socket.remoteAddress;

  console.log(`${nickname}进入聊天室`);

  // 向所有客户端广播当前客户端的加入
  clients.forEach((client) => {
    if (client !== socket) {
      client.write(`${nickname}进入聊天室\n`);
    }
  });

  // 监听数据传输事件,以便处理聊天消息
  socket.on('data', (data) => {
    const message = `${nickname}: ${data}`;
    console.log(message);

    // 向聊天室中的所有客户端对象(除了自己)广播自己的消息
    clients.forEach((client) => {
      if (client !== socket) {
        client.write(message);
      }
    });
  });

  // 连接断开时,将socket从clients数组中删除,向其它客户端广播离开消息
  socket.on('close', () => {
    clients.splice(clients.indexOf(socket), 1);
    console.log(`${nickname}离开了聊天室`);

    clients.forEach((client) => {
      if (client !== socket) {
        client.write(`${nickname}离开了聊天室\n`);
      }
    });
  });
});

server.listen(8080, () => {
  console.log('聊天室服务器已启动');
});

2. 客户端代码

const net = require('net');

const client = net.connect({
  host: '127.0.0.1',
  port: 8080
}, () => {
  console.log('欢迎进入聊天室,请输入昵称:');
});

client.on('data', (data) => {
  console.log(data.toString());
});

process.stdin.on('data', (data) => {
  client.write(data);
});

3. 运行与测试

运行上述代码后,先运行一个聊天室服务器,再运行两个客户端程序进行测试。

其中一个客户端输入昵称后,即可进入聊天室。然后两个客户端就可以相互发送消息了,其它客户端会实时收到消息。

这就是一个基于TCP协议的简单聊天室的实现例子。

以上是关于node.js使用net模块创建服务器和客户端示例【基于TCP协议】的详细攻略,希望能对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:node.js使用net模块创建服务器和客户端示例【基于TCP协议】 - Python技术站

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

相关文章

  • node.JS路径解析之PATH模块使用方法详解

    标题:Node.js路径解析之PATH模块使用方法详解 介绍:本文将详细讲解 Node.js 中路径解析的基础知识以及如何使用 PATH 模块来处理路径字符串。 前置知识 在开始学习 Node.js 的路径处理知识前,需要了解几个概念: 相对路径:基于当前目录的路径。 绝对路径:从根目录开始的路径。 根目录:文件系统的最顶层,通常是 /。 目录分隔符:不同操…

    node js 2023年6月8日
    00
  • TypeScript手写一个简单的eslint插件实例

    下面是详细的攻略: 准备工作 安装相关依赖: npm install -D typescript @typescript-eslint/parser @typescript-eslint/eslint-plugin 其中,typescript 是需要判断的语言,parser 是将代码解析成 AST(Abstract Syntax Tree)的工具,eslin…

    node js 2023年6月8日
    00
  • Node.js开发之访问Redis数据库教程

    Node.js开发之访问Redis数据库教程 什么是Redis数据库? Redis(Remote Dictionary Server)是一种基于键值对的开源数据结构存储系统,是一种高效的内存数据存储服务,它支持多种数据结构(string、hash、list、set、zset等),提供了丰富的数据操作命令,支持事务、持久化等高级功能,常用于缓存、消息队列、分布…

    node js 2023年6月8日
    00
  • NodeJs Express中间件超详细讲解

    首先,我们需要了解什么是Node.js Express中间件。中间件是指在处理HTTP请求时,可以在请求到达业务逻辑之前或之后,对请求进行一些操作或修改。在Express中,中间件是处理HTTP请求的基本单元,它可以通过app.use()方法注册到应用程序中。 在Express中,中间件分为四种类型: 应用级中间件:在应用程序级别注册的中间件,会拦截所有的H…

    node js 2023年6月8日
    00
  • js获取html页面节点方法(递归方式)

    当我们需要获取页面内的某个节点时,我们可以使用JavaScript对DOM树进行遍历,找到目标节点并返回。递归是一种逐级下降的方式,在DOM树上寻找目标节点。下面是详细的攻略: 核心思路 判断当前节点是否是目标节点,是的话则返回该节点 不是目标节点则遍历该节点的所有子节点,并依次调用自己,直到找到目标节点或子节点均为null时停止递归。 代码实现 funct…

    node js 2023年6月8日
    00
  • Node.js中的package.json与cnpm命令行工具介绍

    一、Node.js中的package.json 1. package.json是什么? package.json是Node.js项目必备的一个文件,用于描述项目的元信息和配置信息,如项目名称、版本、作者、依赖包等。当使用npm安装依赖包时,npm会自动查找package.json并下载所有依赖包。 2. 如何创建package.json文件? 可以使用npm…

    node js 2023年6月8日
    00
  • Node.js 中判断一个文件是否存在

    要判断一个文件是否存在,可以使用 Node.js 内置的模块 fs 中的文件系统方法 fs.existsSync()。具体步骤如下: 1. 引入 fs 模块 const fs = require(‘fs’); 2. 使用fs.existsSync()方法来判断文件是否存在,如下: const path = ‘somefile.txt’; if (fs.exi…

    node js 2023年6月8日
    00
  • node.js中的events.emitter.listeners方法使用说明

    当我们在使用Node.js进行编程时,经常需要使用事件驱动的编程模式。Node.js中有一个内置模块events,可以方便地实现事件的发布和订阅。其中,events模块提供了一个listeners()方法,用于获取指定事件的所有监听函数,下面是该方法的详细使用说明。 EventEmitter.listeners(eventName) 该方法用于获取指定事件的…

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