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');
});
代码解析:
- 引入
net
模块。 - 创建一个
net.createServer()
服务端对象,指定一个回调函数,该函数会在每个连接的客户端连接到服务端时被调用。 - 回调函数中打印客户端连接成功的信息,并监听
socket
对象的data
和end
事件。 - 在
data
事件回调函数中打印客户端发送的数据。 - 在
end
事件回调函数中打印客户端已断开信息。 - 调用
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('已从服务器断开');
});
代码解析:
- 引入
net
模块。 - 创建一个
net.createConnection()
客户端对象,指定服务器的端口号并指定一个回调函数,在连接成功后自动执行。 - 在回调函数中打印连接成功信息,并使用
client.write()
方法向服务端发送数据。 - 监听
client
对象的data
和end
事件。 - 在
data
事件回调函数中打印服务端发送的数据,并调用client.end()
方法断开连接。 - 在
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);
代码解析:
- 引入
dgram
模块。 - 创建一个
dgram.createSocket()
服务端对象,指定使用udp4
协议。 - 监听
message
事件,该事件会在收到数据包时触发,打印发送方的地址、端口和消息内容。 - 监听
listening
事件,该事件在服务器开始监听时自动触发,打印服务器监听的地址和端口信息。 - 调用
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();
});
代码解析:
- 引入
dgram
模块。 - 创建一个
dgram.createSocket()
客户端对象,指定使用udp4
协议。 - 创建一个
Buffer
类型的数据message
作为发送的数据。 - 调用
client.send()
方法指定发送的数据、服务器的端口号和地址,当发送完成后执行一个回调函数。 - 在回调函数中打印消息已发送的信息,并关闭客户端连接。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:NodeJS学习笔记之网络编程 - Python技术站