基于node的tcp客户端和服务端的简单通信

yizhihongxing

下面是关于基于node的TCP客户端和服务端的简单通信的攻略:

一、 学习TCP网络协议和socket

在学习TCP客户端和服务端通信前,需要先了解TCP网络协议和socket编程。TCP/IP(Transmission Control Protocol/Internet Protocol)网络协议是Internet网络的基础协议,它规定了网络通信中数据的传输格式、如何开始和结束通信以及错误处理等诸多内容。而socket则是在网络通信中实现数据传输的一种API。

二、 创建TCP服务端

在node.js中创建TCP服务端的方法很简单,只需要使用net模块中的createServer方法即可。代码示例如下:

const net = require('net');
const server = net.createServer(socket => {
    console.log('客户端已连接');
    socket.write('欢迎连接到TCP服务端');
    socket.on('data', data => {
        console.log('接收到客户端数据', data.toString());
    });
    socket.on('close', () => {
        console.log('客户端已断开连接');
    });
}).listen(8080, () => {
    console.log('TCP服务端已开启,监听端口8080');
});

以上代码定义了一个TCP服务端,启动服务器后会监听8080端口。当有客户端连接时,会输出“客户端已连接”,然后向客户端发送一条欢迎消息。当接收到客户端发送的数据时,会输出“接收到客户端数据”并显示客户端发送的数据内容。当客户端断开连接时,会输出“客户端已断开连接”。

三、 创建TCP客户端

在node.js中创建TCP客户端的方法也很简单,只需要使用net模块中的connect方法即可。代码示例如下:

const net = require('net');
const client = net.connect({port: 8080}, () => {
    console.log('已连接到TCP服务器');
    client.write('hello TCP server');
});
client.on('data', data => {
    console.log('接收到服务端数据', data.toString());
    client.end();
});
client.on('end', () => {
    console.log('已断开与TCP服务器的连接');
});

以上代码定义了一个TCP客户端,连接到本地8080端口的TCP服务端。当连接成功时,会输出“已连接到TCP服务器”,然后向服务端发送一条消息“hello TCP server”。当客户端接收到服务端发送的数据时,会输出“接收到服务端数据”并显示服务端发送的数据内容。当与服务端的连接断开时,会输出“已断开与TCP服务器的连接”。

四、 示例示范

接下来我们用实例进行示范。比如我们要用TCP协议完成一个简单的聊天室程序,建立一个开放的监听端口,用户可以通过连接到此端口,发送自己的信息并接收其他人发来的信息。

我们首先开启一个TCP服务端,代码如下:

const net = require('net');
const clients = [];
const server = net.createServer(socket => {
    console.log('客户端已连接');
    clients.push(socket);
    socket.on('data', data => {
        console.log('接收到客户端数据', data.toString());
        broadcast(data, socket);
    });
    socket.on('end', () => {
        clients.splice(clients.indexOf(socket), 1);
        console.log('已断开与客户端的连接');
    });
}).listen(8080, () => {
    console.log('TCP服务端已开启,监听端口8080');
});

function broadcast(message, sender) {
    for (let i = 0; i < clients.length; i++) {
        if (clients[i] !== sender) {
            clients[i].write(message);
        }
    }
}

以上代码定义了一个TCP服务端,启动服务端后会监听8080端口。当有客户端连接时,会输出“客户端已连接”,并将此客户端添加到客户端列表clients中。当接收到客户端发送的数据时,会输出“接收到客户端数据”并转发给其他客户端(使用broadcast函数)。当与客户端的连接断开时,会将此客户端从clients列表中删除,然后输出“已断开与客户端的连接”。

然后我们开启一个TCP客户端,代码如下:

const net = require('net');
const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
const client = net.connect({port: 8080}, () => {
    console.log('已连接到TCP服务器');
    rl.setPrompt('> ');
    rl.prompt();
});
client.on('data', data => {
    console.log(data.toString());
    rl.prompt();
});
rl.on('line', line => {
    client.write(line);
    rl.prompt();
});
client.on('end', () => {
    console.log('已断开与TCP服务器的连接');
    process.exit(0);
});

以上代码定义了一个TCP客户端,连接到本地8080端口的TCP服务端。当连接成功时,会输出“已连接到TCP服务器”,然后进入命令行模式。当接收到服务器发送的数据时,会显示接收到的数据,并重新进入命令行模式。当用户在命令行中输入一行内容时,会将此内容发送给服务器。当与服务器的连接断开时,会输出“已断开与TCP服务器的连接”并退出程序。

启动一个以上代码实例后,客户端和服务端即可相互通信,完成一个简单的聊天室程序。

以上就是关于基于node的TCP客户端和服务端的简单通信的攻略,希望能对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于node的tcp客户端和服务端的简单通信 - Python技术站

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

相关文章

  • Node.js 应用探索文件解压缩示例详解

    Node.js 应用探索文件解压缩示例详解 简介 本文通过一个解压缩文件的示例,演示了如何在 Node.js 应用中使用 zlib 模块进行文件解压缩的过程。在示例中,我们使用 fs 模块读取文件,zlib 模块对文件进行解压缩,然后将解压缩后的文件输出到指定位置。 实现步骤 安装依赖 首先,我们需要安装两个依赖: zlib: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
  • Python实现同时兼容老版和新版Socket协议的一个简单WebSocket服务器

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

    node js 2023年6月8日
    00
  • JavaScript实现优先级队列

    实现一个优先级队列(Priority Queue)是JavaScript开发中一个常见的问题,本文将介绍如何用JavaScript实现优先级队列。 什么是优先级队列? 优先级队列是一种特殊的队列,每个元素都有一个优先级。出队列时,队列将会按照元素的优先级从高到低出队列。 实现步骤 步骤一、创建优先级队列类 我们可以使用ES6中的class来创建一个优先级队列…

    node js 2023年6月8日
    00
  • 在Centos部署nodejs的步骤

    下面是在CentOS部署Node.js的步骤攻略: 安装Node.js 使用yum安装Node.js: sudo yum install -y nodejs 安装完成后,可以使用以下命令验证Node.js版本: node -v 安装npm 在Node.js中,npm是一个包管理器,用于安装和管理Node.js模块。可以通过以下命令安装npm: sudo yu…

    node js 2023年6月8日
    00
  • Docker部署Node.js的方法步骤

    下面是Docker部署Node.js的方法步骤的完整攻略。 准备工作 安装 Docker 环境 安装 Node.js 环境 编写 Node.js 应用代码 使用 npm 初始化项目 编写 Dockerfile 文件 Dockerfile 文件用于构建 Docker 镜像,以下是一个简单的 Node.js 镜像的 Dockerfile 文件: FROM nod…

    node js 2023年6月8日
    00
  • 浅谈Express.js解析Post数据类型的正确姿势

    浅谈Express.js解析Post数据类型的正确姿势 在使用Node.js开发Web应用程序时,我们通常会使用Express.js框架来帮助我们搭建应用程序的基本结构。而处理Post请求,获取Post数据则是开发Web应用程序时必不可少的一部分。本篇文章将会详细讲解,在Express.js中,如何正确地解析不同类型的Post数据。 解析applicatio…

    node js 2023年6月8日
    00
  • Node.js多进程的方法与参数实例说明

    Node.js支持多进程的方式主要有以下几种方法: cluster模块:cluster模块是Node.js的核心模块之一,提供了一种简单的方法来创建共享端口的子进程群集,从而实现多进程的支持。它主要通过fork()的方式复制主进程来创建子进程,并使用IPC(进程间通信)来进行进程间通信。代码实例如下: const cluster = require(‘clu…

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