Node.js开发之套接字(socket)编程入门示例

下面我将详细讲解“Node.js开发之套接字(socket)编程入门示例”的完整攻略。

套接字(socket)编程入门

什么是套接字(socket)编程?

套接字(socket)是一种通信机制,其可用于不同计算机之间的通信,也可用于同一计算机内进程之间的通信。套接字编程则是基于套接字的通信编程。在Node.js中,通过使用net模块提供的套接字API,即可实现套接字编程。套接字编程主要用于实现网络通信功能。

创建服务端套接字

要创建一个服务端套接字,可以使用以下代码:

const net = require('net');

//创建服务端套接字
const server = net.createServer((socket) => {
    //新的客户端连接时,会执行该回调函数
    //可以在该回调函数中处理从客户端接收到的数据

    //处理完成之后,关闭套接字
    socket.end();
});

//通过listen方法对服务端进行监听
server.listen({
    host: '127.0.0.1',
    port: 3000
}, () => {
    console.log('服务端套接字已经启动');
})

在上述代码中,我们通过net.createServer()方法创建了一个服务端套接字,该方法的参数是一个回调函数,该函数会在新的客户端连接时执行。在该回调函数中,我们可以处理从客户端接收到的数据,并在处理完成之后关闭套接字。

创建客户端套接字

要创建一个客户端套接字,可以使用以下代码:

const net = require('net');

//创建一个客户端套接字
const client = net.connect({
    host: '127.0.0.1',
    port: 3000
},() => {
    //连接成功时,会执行该回调函数
    console.log('客户端套接字已经连接');

    //向服务端发送数据
    client.write('hello world');
});

//当从服务端接收到数据时,会执行该回调函数
client.on('data', (data) => {
    console.log(data.toString());

    //处理完成之后,关闭套接字
    client.end();
});

在上述代码中,我们通过net.connect()方法创建了一个客户端套接字,该方法的参数是一个对象,其中包含需要连接的服务器的主机和端口信息。在连接成功时,会执行回调函数,在该回调函数中可以向服务器发送数据。同时,我们也监听了客户端套接字的data事件,当从服务端接收到数据时,会触发该事件,我们在该事件中处理接收到的数据,并在处理完成之后关闭套接字。

示例说明1

以下示例展示了通过套接字实现的一个简单的聊天室应用:

const net = require('net');

//存储客户端套接字的数组
const clients = [];

//创建服务端套接字
const server = net.createServer((socket) => {
    //新的客户端连接时,会执行该回调函数
    console.log('新的客户端已经连接');

    //将当前客户端套接字存储起来
    clients.push(socket);

    //为当前客户端套接字绑定data事件
    socket.on('data', (data) => {
        //向除当前客户端外的其他客户端发送数据
        clients.filter(item => item != socket).forEach(client => {
            client.write(socket.remoteAddress + ':' + socket.remotePort + '说:' + data);
        });
    });

    //为当前客户端套接字绑定close事件
    socket.on('close',() => {
        //从数组中删除当前客户端套接字,表示该客户端已经离开聊天室
        clients.splice(clients.indexOf(socket),1);
        console.log('客户端已经离开聊天室');
    });
});

//通过listen方法对服务端进行监听
server.listen({
    host: '127.0.0.1',
    port: 3000
}, () => {
    console.log('服务端套接字已经启动');
})

在以上示例中,我们首先创建了一个数组用于存储客户端套接字,然后在服务端套接字的回调函数中将每个新的客户端套接字存储到该数组中。在为每个客户端套接字绑定data事件时,我们通过filter方法过滤掉当前客户端套接字,然后对于剩余的套接字,均向它们发送当前客户端发送过来的数据。在为每个客户端套接字绑定close事件时,我们从存储客户端套接字的数组中删除离开聊天室的客户端套接字。

示例说明2

以下示例展示了一个简单的文件传输应用:

const net = require('net');
const fs = require('fs');

//创建服务端套接字
const server = net.createServer((socket) => {
    //新的客户端连接时,会执行该回调函数
    console.log('新的客户端已经连接');

    //为当前客户端套接字绑定data事件
    socket.on('data', (data) => {
        //从客户端发送过来数据的第一位获取文件名
        const fileName = data.slice(0, data.indexOf('\n')).toString();
        console.log('将要传输的文件名为:' + fileName);

        //从客户端发送过来数据的第一位后两位获取文件大小
        const fileSize = parseInt(data.slice(data.indexOf('\n')+1, data.indexOf('\n')+3));
        console.log('将要传输的文件大小为:' + fileSize + '字节');

        //从客户端发送过来的数据中提取文件内容
        const fileContent = data.slice(data.indexOf('\n')+3);

        //将提取的文件内容写入文件中
        fs.writeFile(fileName, fileContent, (err) => {
            if (err) {
                console.log('写入文件失败');
            } else {
                console.log('写入文件成功');
            }
        });
    });
});

//通过listen方法对服务端进行监听
server.listen({
    host: '127.0.0.1',
    port: 3000
}, () => {
    console.log('服务端套接字已经启动');
})

在以上示例中,我们首先创建了一个服务端套接字,在服务端套接字的回调函数中,我们只为每个客户端套接字绑定了data事件。在该事件中,我们首先从客户端发送过来的数据中获取文件名和文件大小,接着从数据中提取文件内容,然后将文件内容写入文件中。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Node.js开发之套接字(socket)编程入门示例 - Python技术站

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

相关文章

  • 根据配置文件加载js依赖模块

    加载 JS 依赖模块是一个非常常见的需求。通过配置文件加载 JS 依赖模块可以使你的代码方便地管理和维护。下面是加载 JS 依赖模块的完整攻略。 第一步:安装依赖项 在使用配置文件加载 JS 依赖模块之前,你需要安装一个模块管理器,例如 require.js 或者 webpack。 以 require.js 为例,你可以通过以下命令安装: npm insta…

    node js 2023年6月8日
    00
  • Node.js实现mysql连接池使用事务自动回收连接的方法示例

    MySQL是一个经典的关系型数据库,Node.js的mysql模块非常好用。但是,在实际使用过程中,需要考虑到性能和稳定性问题。连接池就是为了解决这些问题而出现的。 什么是连接池 连接池是为了避免频繁的数据库连接和断开所带来的性能瓶颈,并且能更好的管理数据库连接,提高应用程序的稳定性,是一种容器。 连接池中存放着一系列的数据库连接,这些连接都已经与数据库建立…

    node js 2023年6月8日
    00
  • 详解nodejs微信公众号开发——3.封装消息响应模块

    下面是“详解nodejs微信公众号开发——3.封装消息响应模块”的完整攻略: 详解nodejs微信公众号开发——3.封装消息响应模块 前言 在微信公众号开发中,我们需要对用户发送的所有消息进行响应。针对不同类型的消息,需要有相应的处理逻辑。为了方便管理和复用,我们可以将消息响应模块进行封装,使代码结构更加清晰和易于维护。 在本篇文章中,我们将会详细介绍如何封…

    node js 2023年6月8日
    00
  • node.js中的fs.lchown方法使用说明

    Node.js中的fs模块提供了很多文件系统相关的功能,其中包括更改文件所有者的方法lchown。本文将详细解释如何使用fs.lchown方法。 fs.lchown方法的用途 fs.lchown方法用于更改文件或目录的所有者。不同于fs.chown方法,它不会跟踪链接,并且仅在操作系统支持它时才有用。 fs.lchown方法的语法 fs.lchown(pat…

    node js 2023年6月8日
    00
  • nodejs前端模板引擎swig入门详解

    让我来详细讲解一下“nodejs前端模板引擎swig入门详解”的完整攻略。 标题 nodejs前端模板引擎swig入门详解 简介 Swig是一款简单、快速、可扩展的 JavaScript 模板引擎。Swig能够在Node.js和浏览器中运行,因此它不仅适用于服务器端的视图,还适用于浏览器端的JavaScript模板引擎。Swig具有一个内置缓存系统,能显著提…

    node js 2023年6月8日
    00
  • node.js中的forEach()是同步还是异步呢

    在Node.js中,forEach()方法是同步还是异步取决于迭代器函数是否为异步函数。 当迭代器函数是同步函数时,forEach()方法就是同步的。每个元素的迭代器函数都会被立即调用,直到循环结束,然后forEach()返回。 示例1: const arr = [‘a’, ‘b’, ‘c’]; arr.forEach((item) => { cons…

    node js 2023年6月8日
    00
  • vue-admin-box第一步npm install时报错的处理

    对于vue-admin-box在npm install时报错的处理,可以按照以下完整攻略进行处理: 1. 查看报错信息 当npm install时出现错误时,首先需要查看报错信息。报错信息会提示错误的类型、位置等相关信息,进而帮助我们分析原因。 例如,如果错误提示为“Error: Cannot find module ‘xxx’”,这说明需要安装xxx模块。…

    node js 2023年6月8日
    00
  • Node 文件查找优先级及 Require 方法文件查找策略

    Node 文件查找优先级及 Require 方法文件查找策略 在 Node.js 中,当我们使用 require 方法加载模块时,Node.js 会按照一定的文件查找策略来查找相应的模块文件。掌握这些策略对于理解 Node.js 模块化机制非常重要。 文件查找优先级 在加载模块时,Node.js 会按照以下顺序查找模块文件: 核心模块:如果你加载的是一个 N…

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