NodeJS教程

网络编程

Preview
  • Node.js 网络编程概要
  • 网络通信基础
  • TCP 服务器
  • TCP 客户端
  • UDP 服务器
  • UDP 客户端
  • 总结

Node.js 网络编程概要

Node.js 是一个高效的服务器端 JavaScript 运行环境,它提供了一系列的网络编程模块,可以用于创建各种类型的网络应用程序和服务。本文将介绍 Node.js 中常用的网络编程模块和相关概念。

网络通信基础

在网络通信中,常用的协议有 TCP 和 UDP。TCP 是一种可靠的、面向连接的协议,它将数据分割成数据包进行传输,并确保数据包按照正确的顺序接收。UDP 是一种无连接的协议,它将数据包独立地发送给接收者,不保证数据包的正确接收顺序和完整性。

在 Node.js 中,可以使用 net 模块来创建 TCP 服务器和客户端,使用 dgram 模块来创建 UDP 服务器和客户端。

TCP 服务器

使用 net 模块的 createServer() 方法可以创建一个 TCP 服务器。服务器监听指定的端口,并在有客户端连接时触发 connection 事件。

const net = require('net');

const server = net.createServer((socket) => {
  console.log('client connected');
  socket.on('data', (data) => {
    console.log(data.toString());
  });
  socket.on('end', () => {
    console.log('client disconnected');
  });
});

server.listen(8080, () => {
  console.log('server started');
});

上面的代码创建了一个 TCP 服务器,监听 8080 端口。当有客户端连接时,会打印 client connected,并在接收到客户端发送的数据时打印该数据。当客户端断开连接时,会打印 client disconnected

TCP 客户端

使用 net 模块的 connect() 方法可以创建一个 TCP 客户端。客户端连接指定的服务器地址和端口,并在连接成功后触发 connect 事件。

const net = require('net');

const client = net.connect({ port: 8080 }, () => {
  console.log('connected to server!');
  client.write('hello server!');
});

client.on('data', (data) => {
  console.log(data.toString());
  client.end();
});

client.on('end', () => {
  console.log('disconnected from server');
});

上面的代码创建了一个 TCP 客户端,连接到 8080 端口的服务器。当连接成功时,会打印 connected to server!,并向服务器发送 hello server!。客户端接收到服务器发送的数据时,会打印该数据。当与服务器断开连接时,会打印 disconnected from server

UDP 服务器

使用 dgram 模块的 createSocket() 方法可以创建一个 UDP 服务器。服务器监听指定的端口,并在接收到数据时触发 message 事件。

const dgram = require('dgram');

const server = dgram.createSocket('udp4');

server.on('message', (msg, rinfo) => {
  console.log(`server got: ${msg} from ${rinfo.address}:${rinfo.port}`);
});

server.on('listening', () => {
  const address = server.address();
  console.log(`server listening ${address.address}:${address.port}`);
});

server.bind(8080);

上面的代码创建了一个 UDP 服务器,监听 8080 端口。当接收到客户端发送的数据时,会打印该数据和客户端的地址和端口。

UDP 客户端

使用 dgram 模块的 createSocket() 方法可以创建一个 UDP 客户端。客户端向指定的服务器地址和端口发送数据,并在接收到服务器回复时触发 message 事件。

const dgram = require('dgram');

const client = dgram.createSocket('udp4');
const message = Buffer.from('hello server!');

client.on('message', (msg, rinfo) => {
  console.log(`client got: ${msg} from ${rinfo.address}:${rinfo.port}`);
  client.close();
});

client.send(message, 8080, 'localhost', (err) => {
  if (err) throw err;
  console.log('message sent to server');
});

上面的代码创建了一个 UDP 客户端,向 localhost 的 8080 端口发送数据。当接收到服务器回复时,会打印该数据和服务器的地址和端口。客户端发送完数据后,调用 close() 方法关闭客户端。

总结

本文介绍了 Node.js 中常用的网络编程模块和相关概念,包括 TCP 服务器和客户端、UDP 服务器和客户端。通过这些模块和方法,可以轻松地创建各种类型的网络应用程序和服务。