NodeJS学习笔记之网络编程

yizhihongxing

NodeJS学习笔记之网络编程

学习NodeJS的网络编程,首先需要掌握以下几个核心概念:网络、协议、IP地址、端口、TCP协议和UDP协议。

网络概念

网络是指两台或多台计算机通过物理设备(例如交换机、路由器)或者空气波段(例如无线局域网)连接在一起,进行数据交换和资源共享的物理和逻辑集合体。

协议概念

网络中,协议是指计算机和计算机之间进行通讯时所采用的一套规范。例如TCP协议和UDP协议就是一套协议规范。

IP地址

IP地址是互联网协议地址,是指分配给设备的一串用于与其他设备相互通信的数字串。例如,192.168.0.1 就是一个IP地址。

端口

端口是计算机在网络中的一个数字地址,用于区分不同的服务或应用程序。端口范围是从0到65535,其中0到1023是系统保留端口,一般应用程序使用大于1023的端口。

TCP协议和UDP协议

TCP协议和UDP协议是目前互联网上最为常用的两种协议。其中,TCP协议是一种面向连接的、可靠的、基于流的协议,它保证数据传输的可靠性和顺序性;UDP协议是一种无连接的、不可靠的、面向数据包的协议,它不对数据传输进行任何形式的保证。

在NodeJS中,我们可以使用内置模块 net 来实现TCP协议的编程,使用内置模块 dgram 来实现UDP协议的编程。

实现TCP服务端

以下是一个使用 net 模块实现的TCP服务端示例:

const net = require('net');
const server = net.createServer((socket) => {
  console.log('客户端已连接');
  socket.on('data', (data) => {
    console.log(`收到客户端发送的数据:${data.toString()}`);
  });
  socket.on('end', () => {
    console.log('客户端已断开');
  });
});
server.listen(3000, () => {
  console.log('TCP server is listening on port 3000');
});

代码解析:

  1. 引入 net 模块。
  2. 创建一个 net.createServer() 服务端对象,指定一个回调函数,该函数会在每个连接的客户端连接到服务端时被调用。
  3. 回调函数中打印客户端连接成功的信息,并监听 socket 对象的 dataend 事件。
  4. data 事件回调函数中打印客户端发送的数据。
  5. end 事件回调函数中打印客户端已断开信息。
  6. 调用 server.listen() 方法指定服务端监听的端口号。

实现TCP客户端

以下是一个使用 net 模块实现的TCP客户端示例:

const net = require('net');
const client = net.createConnection({ port: 3000 }, () => {
  console.log('连接成功');
  client.write('Hello, server!');
});
client.on('data', (data) => {
  console.log(`收到服务端发送的数据:${data.toString()}`);
  client.end();
});
client.on('end', () => {
  console.log('已从服务器断开');
});

代码解析:

  1. 引入 net 模块。
  2. 创建一个 net.createConnection() 客户端对象,指定服务器的端口号并指定一个回调函数,在连接成功后自动执行。
  3. 在回调函数中打印连接成功信息,并使用 client.write() 方法向服务端发送数据。
  4. 监听 client 对象的 dataend 事件。
  5. data 事件回调函数中打印服务端发送的数据,并调用 client.end() 方法断开连接。
  6. end 事件回调函数中打印已经断开连接的信息。

实现UDP服务端

以下是一个使用 dgram 模块实现的UDP服务端示例:

const dgram = require('dgram');
const server = dgram.createSocket('udp4');
server.on('message', (msg, rinfo) => {
  console.log(`接收到来自 ${rinfo.address}:${rinfo.port} 的 ${msg}`);
});
server.on('listening', () => {
  const address = server.address();
  console.log(`UDP server is listening on ${address.address}:${address.port}`);
});
server.bind(3000);

代码解析:

  1. 引入 dgram 模块。
  2. 创建一个 dgram.createSocket() 服务端对象,指定使用 udp4 协议。
  3. 监听 message 事件,该事件会在收到数据包时触发,打印发送方的地址、端口和消息内容。
  4. 监听 listening 事件,该事件在服务器开始监听时自动触发,打印服务器监听的地址和端口信息。
  5. 调用 server.bind() 方法指定服务器监听的端口号。

实现UDP客户端

以下是一个使用 dgram 模块实现的UDP客户端示例:

const dgram = require('dgram');
const client = dgram.createSocket('udp4');
const message = Buffer.from('Hello, server!');
client.send(message, 3000, 'localhost', (err) => {
  if (err) {
    console.log(err);
    return;
  }
  console.log('消息已发送');
  client.close();
});

代码解析:

  1. 引入 dgram 模块。
  2. 创建一个 dgram.createSocket() 客户端对象,指定使用 udp4 协议。
  3. 创建一个 Buffer 类型的数据 message 作为发送的数据。
  4. 调用 client.send() 方法指定发送的数据、服务器的端口号和地址,当发送完成后执行一个回调函数。
  5. 在回调函数中打印消息已发送的信息,并关闭客户端连接。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:NodeJS学习笔记之网络编程 - Python技术站

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

相关文章

  • 前端面试运行npm run xxx发生过程原理解析

    当在前端面试中被问到“运行npm run xxx的过程原理”时,我们可以从以下三个方面进行详细讲解: 1. npm是什么,npm run xxx是什么 npm 全称为 Node Package Manager,是Node.js官方提供的包管理器,用于管理前端集成开发环境和第三方包。 npm run xxx 是用于在当前项目的终端中运行命令 xxx,其中 xx…

    node js 2023年6月8日
    00
  • 调试Node.JS的辅助工具(NodeWatcher)

    调试是程序开发中不可或缺的一环,Node.js作为JavaScript语言的服务器端开发平台,也有一些辅助工具用来进行调试。其中,NodeWatcher是一款比较实用的辅助工具,它可以监测服务器端文件的变化,从而实现了热重载,方便程序员进行调试和开发。 安装NodeWatcher 在使用NodeWatcher前,需要先安装它的相关依赖。首先,需要安装Node…

    node js 2023年6月8日
    00
  • js事件(Event)知识整理

    JavaScript 事件(Event)知识整理 本文将介绍JavaScript中的事件(Event)知识,主要内容包括事件类型、事件绑定、事件传播、事件代理等。 事件类型 JavaScript中的事件类型比较多,常见的事件类型如下: 点击事件:click 双击事件:dblclick 鼠标移动事件:mousemove 键盘按下事件:keydown 页面加载事…

    node js 2023年6月8日
    00
  • nodejs搭建本地服务器并访问文件的方法

    要搭建本地服务器并访问文件,我们需要按照以下步骤进行: 安装NodeJS 创建项目目录 初始化项目 创建服务器 访问文件 下面将详细讲解每一步的具体操作。 1.安装NodeJS 首先需要安装NodeJS,这可以到NodeJS官网 https://nodejs.org/ 下载对应系统的安装包,并根据安装向导进行安装。 2.创建项目目录 在创建NodeJS项目之…

    node js 2023年6月8日
    00
  • 多个vue项目复用一个node_modules的问题

    首先需要明确的是,当我们说复用node_modules时,我们指的是多个Vue项目共享一个node_modules文件夹,而不是多个项目共用一个包的实例。 一般来说,我们将每个Vue项目的依赖安装在各自的node_modules文件夹中,这样可以确保每个Vue项目的依赖不会相互影响。但是,当我们需要同时维护多个Vue项目时,这样做就会带来很多重复的工作。为了…

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

    来介绍一下Node.js中的Buffer.isEncoding()方法。 方法介绍 Buffer.isEncoding(encoding)方法用来判断字符串编码是否为Node.js支持的合法编码名。如果传入的encoding参数不是字符串编码名,该方法返回false。该方法的原型定义如下: Buffer.isEncoding(encoding: string…

    node js 2023年6月8日
    00
  • node打造微信个人号机器人的方法示例

    以下是“node打造微信个人号机器人的方法示例”的完整攻略。 1. 认识微信个人号机器人 微信个人号机器人,是指通过编写程序,让微信个人号能够自动化地进行某些操作或提供某些服务,从而达到自动化处理的效果。常见的微信个人号机器人实现方式有网页版微信、itchat等。 2. 准备工作 在开始编写微信个人号机器人之前,需要完成以下准备工作: 微信个人号。如果暂时没…

    node js 2023年6月8日
    00
  • 浅谈nodejs中的类定义和继承的套路

    下面就为大家介绍一下“浅谈nodejs中的类定义和继承的套路”的完整攻略。 一、类定义 在nodejs里定义类的一般套路如下: class Person { constructor(name, age) { this.name = name; this.age = age; } sayHello() { console.log(`Hello, my name…

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