NodeJS学习笔记之网络编程

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日

相关文章

  • Nodejs访问网络并解析返回的json的实现方法

    Node.js是一种基于V8引擎的JavaScript运行环境,具有事件驱动、非阻塞I/O的特性,使得它特别适合用于处理高并发、I/O密集、实时数据的应用场景。在很多实际业务场景中,我们常常需要通过Node.js访问网络 API,并且将返回的数据以JSON格式解析出来,得到我们需要的内容。下面是实现方法及代码示例: 步骤一:使用http或https模块发起网…

    node js 2023年6月8日
    00
  • Nodejs下DNS缓存问题浅析

    Nodejs下DNS缓存问题浅析 当我们使用Nodejs时,偶尔会遇到DNS解析出现问题的情况,这可能是由于DNS缓存导致的。这篇文章将探讨如何在Nodejs中解决DNS缓存问题以及如何刷新DNS缓存。 DNS缓存问题 当我们使用Nodejs创建一个HTTP请求时,Node会优先使用本地DNS缓存来解析目标主机名以获取其IP地址。如果DNS缓存中没有找到,N…

    node js 2023年6月8日
    00
  • Node.js:模块查找,引用及缓存机制详解

    下面为您详细讲解“Node.js:模块查找,引用及缓存机制详解”的完整攻略。 Node.js:模块查找、引用及缓存机制详解 模块查找 在 Node.js 中,require 方法用于加载模块。当加载一个模块时,Node.js 需要使用一定的规则来查找该模块,这些规则将在下面详细解释。 核心模块 当加载一个核心模块时,Node.js 会优先从内置的核心模块列表…

    node js 2023年6月8日
    00
  • node.js实现回调的方法示例

    下面我将详细讲解“node.js实现回调的方法示例”的完整攻略,包含以下内容: 什么是回调函数 Node.js中实现回调的两种方式 示例一:使用普通回调函数实现异步流程控制 示例二:使用Promise对象实现异步流程控制 1. 什么是回调函数 回调函数是指将一个函数作为参数传递给另一个函数,并且这个参数函数将在另一个函数完成后被调用执行的过程。回调函数是实现…

    node js 2023年6月8日
    00
  • 教你如何用node连接redis的示例代码

    下面是“教你如何用node连接redis的示例代码”的完整攻略: 一、什么是Redis? Redis是一个基于内存的数据结构存储系统,可以用作数据库、缓存和消息队列等。它支持多种数据结构,如字符串(常用于缓存)、哈希表、列表、集合和有序集合。Redis还提供了事务、持久化和读写分离等高级特性,是当今十分流行的数据存储方案之一。 二、Node.js操作Redi…

    node js 2023年6月8日
    00
  • 使用js声明数组,对象在jsp页面中(获得ajax得到json数据)

    下面是使用JavaScript声明数组和对象,并在JSP页面中获取AJAX获取的JSON数据的完整攻略: 步骤一:准备工作 首先,在JSP页面中引入jQuery库,以便使用AJAX获取JSON数据。可以使用以下代码: <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1…

    node js 2023年6月8日
    00
  • 使用node-canvas在服务端渲染echarts图表解析

    使用node-canvas在服务端渲染echarts图表,可以实现在后端生成静态图表,并且可以在不需要浏览器环境的情况下使用echarts。 安装node-canvas模块 要使用node-canvas在服务端渲染echarts图表,需要预先安装node-canvas模块,命令如下: npm install canvas 注意,node-canvas依赖于C…

    node js 2023年6月8日
    00
  • 详解用Node.js写一个简单的命令行工具

    那么我们来详细讲解一下如何用Node.js写一个简单的命令行工具。可以按照以下步骤进行操作: 第一步:创建一个新的Node.js项目 首先,需要创建一个新的Node.js项目。在命令行中,可以使用以下命令来创建一个新的项目: mkdir my-cli-tool cd my-cli-tool npm init 这将会让你进入一个交互式命令行,你需要回答一些问题…

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