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

下面是关于基于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日

相关文章

  • Express 框架中使用 EJS 模板引擎并结合 silly-datetime 库进行日期格式化的实现方法 原创

    下面是如何在 Express 框架中使用 EJS 模板引擎并结合 silly-datetime 库进行日期格式化的实现方法,分为以下两个步骤: 步骤一:安装和配置 1. 安装 Express 和 EJS 在项目根目录中运行以下命令来安装 Express 和 EJS: npm install express ejs –save 2. 安装 silly-dat…

    node js 2023年6月8日
    00
  • nodejs判断文件、文件夹是否存在及删除的方法

    Node.js判断文件、文件夹是否存在及删除的方法 在Node.js中,判断文件和文件夹是否存在,以及删除文件和文件夹是非常常见的操作。接下来我们将详细介绍如何使用Node.js来实现这些操作。 判断文件是否存在 判断文件是否存在,我们可以使用Node.js提供的fs模块中的access()方法。该方法用来测试是否能够以读写方式打开文件。 代码示例: con…

    node js 2023年6月8日
    00
  • 如何通过javaScript去除字符串两端的空白字符

    要通过javaScript去除字符串两端的空白字符,可以使用String对象提供的trim()方法。以下是完整攻略: 1. 使用trim()方法去除字符串两端的空白字符 trim()方法可以去除字符串的两端空白字符(包括空格、制表符、换行符等)。使用方法如下: var str = " hello world! "; str = str.t…

    node js 2023年6月8日
    00
  • js一般方法改写成面向对象方法的无限级折叠菜单示例代码

    针对“js一般方法改写成面向对象方法的无限级折叠菜单示例代码”的完整攻略,我将分为以下几个部分进行介绍: 理解折叠菜单的基本原理 将一般方法改写成面向对象方法 根据面向对象方法实现无限级折叠菜单 示例说明 1. 理解折叠菜单的基本原理 折叠菜单是一种常见的交互式Web控件,它可以让用户在点击相应的菜单项时展开或收起相应的内容。实现折叠菜单的核心在于控制菜单项…

    node js 2023年6月8日
    00
  • 关于Mac下安装nodejs、npm和cnpm的教程

    下面是关于Mac下安装nodejs、npm和cnpm的完整攻略: 安装nodejs 下载安装包 首先,我们需要从官网(https://nodejs.org/en/download/)下载适合Mac操作系统的nodejs安装包,一般我们选择稳定版本即可。 安装 下载安装包后,打开安装包进行安装。安装过程中,需要注意一些选项: 在安装程序中,把nodejs的可执…

    node js 2023年6月8日
    00
  • express框架通过ejs模板渲染输出页面实例分析

    我会为你详细讲解“express框架通过ejs模板渲染输出页面实例分析”的完整攻略。该攻略的过程将介绍express框架如何使用ejs模板引擎来渲染页面模板并输出页面。 环境准备 在开始攻略之前,我们需要准备好以下环境: Node.js环境(建议使用最新版) npm包管理器(通常与Node.js环境一起安装) 一个文本编辑器(如:VS Code) 安装和配置…

    node js 2023年6月8日
    00
  • nodejs动态创建二维码的方法

    当我们需要生成二维码时,可能会选择使用前端插件,比如jquery-qrcode等。但是,如果我们想要在后端生成二维码,这时候就需要使用Node.js来实现了。 下面是关于“nodejs动态创建二维码的方法”的完整攻略: 安装QRCode模块 在Node.js中,我们可以使用QRCode模块来生成二维码。在安装QRCode之前,需要先确保 Node.js 环境…

    node js 2023年6月8日
    00
  • Express+Nodejs 下的登录拦截实现代码

    下面是Express+Nodejs下的登录拦截实现代码的攻略: 一、前置知识 在学习登录拦截实现之前,需要掌握以下知识: Node.js基础知识,包括模块化、文件系统、HTTP模块等; Express框架的基本使用方法; cookie和session的基本概念和使用方法。 二、实现登录拦截的基本思路 实现登录拦截需要结合cookie和session技术,其基…

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