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

yizhihongxing

下面我将详细讲解“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日

相关文章

  • Node.js中的async 和 await 关键字微任务和宏任务

    Node.js中的async和await关键字是用于处理异步操作的新特性。这两个关键字实际上是基于Promise的封装,它们能够使得代码看起来更加简洁易懂,同时也能解决回调地狱等问题。async和await在执行过程中会产生微任务和宏任务,这两个概念对于理解异步编程非常重要。 async和await的基本用法 async函数是ES7中的新语法,用来表示一个异…

    node js 2023年6月8日
    00
  • npm install安装失败报错:The operation was rejected by your operating system

    当我们使用npm安装依赖时,可能会出现”npm install安装失败报错:The operation was rejected by your operating system”的错误提示。这个错误通常是因为电脑权限问题导致的,我们可以采取以下操作来解决此问题: 解决方式一:使用管理员权限运行命令行工具 有时候我们在安装依赖时,会因为权限不够而安装失败。可…

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

    Node.js中的Buffer是用来处理二进制数据的类,提供了很多方法给开发者使用。其中,toJSON是一个将Buffer转成JSON对象的方法。在本文中,我会详细讲解toJSON方法的使用说明以及提供两个示例来帮助理解。 使用说明 语法 Buffer.toJSON() 返回值 返回一个JSON格式的对象,属性有type和data:- type:固定值 Bu…

    node js 2023年6月8日
    00
  • 通过nodejs 服务器读取HTML文件渲染到页面的方法

    首先,要实现通过nodejs服务器读取HTML文件并将其渲染到页面,我们需要用到Node.js的http、fs和path模块。 创建nodejs服务器 首先,在你的项目目录下创建一个server.js文件,使用以下代码创建一个简单的http服务器: const http = require(‘http’); http.createServer(functio…

    node js 2023年6月8日
    00
  • 使用node.js搭建服务器

    下面是使用node.js搭建服务器的完整攻略。 准备工作 首先,在本地安装node.js。可以到官网 https://nodejs.org/en/ 下载对应操作系统的安装包进行安装。安装完成后,在终端窗口输入node -v检查node.js的版本是否正确。 创建服务器 使用node.js创建一个服务器的步骤如下:1. 引入http模块:const http …

    node js 2023年6月8日
    00
  • WebStorm ES6 语法支持设置&babel使用及自动编译(详解)

    WebStorm ES6 语法支持设置 & Babel 使用及自动编译 (详解) WebStorm 是目前市面上最为流行的前端开发 IDE 之一,同时也支持 ES6 语法的开发,本文将详细讲解 WebStorm 如何设置 ES6 语法支持和使用 Babel 自动编译。 设置 WebStorm ES6 语法支持 在 WebStorm 中开启 ES6 语…

    node js 2023年6月8日
    00
  • TypeScript实现数组和树的相互转换

    类型脚本(TypeScript)是JavaScript的一个超集,它增加了可选的静态类型和其他语言特性,使得编写和维护大型JavaScript应用更加容易。可以使用TypeScript实现数组和树之间的相互转换,本文将提供一种详细的操作攻略。 步骤一:创建类型定义和数据结构 在TypeScript中,我们可以使用类型定义来定义数据结构。在本例中,我们将使用类…

    node js 2023年6月8日
    00
  • TypeScript 泛型重载函数的使用方式

    下面我详细讲解一下“TypeScript 泛型重载函数的使用方式”的完整攻略。 什么是 TypeScript 泛型重载函数 TypeScript 泛型重载函数指的是在函数中定义多个函数原型,针对不同类型的参数选择不同的函数原型进行调用,以实现对不同类型参数的处理。 泛型重载函数需要满足以下特点: 函数需要有多个原型定义 原型中包含不同的泛型类型,如 <…

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