Cover Image for 如何在 Node.js 中创建 TCP 服务器
[Node.js][TCP][初学者]
2024年6月25日

如何在 Node.js 中创建 TCP 服务器

在本文中,我们将了解如何在 Node.js 中创建一个简单的 TCP 服务器。TCP 是最常见的传输层协议之一。它提供了一种可靠的方式来以有序和错误检查的流发送数据包。TCP 是面向连接的,这意味着在发送数据之前,客户端和服务器之间必须建立连接。

安装 Node.js:

如果你还没有安装 Node.js,请从官方网站下载并安装。

创建项目:

为你的项目创建一个新文件夹并进入其中:

mkdir tcp-server
cd tcp-server

创建一个名为 server.js 的文件。

导入 net 模块。此模块不需要安装,因为它随 Node.js 一起提供。

const net = require('net');

调用 createServer 方法。它创建一个服务器对象。

const net = require('net');
const server = net.createServer();

createServer 方法添加一个 callback。当 connection 事件被触发时调用此回调。此事件在与服务器建立新连接时发生。此事件返回一个我们命名为 socket 的对象。此 socket 对象是 net.Socket 的一个实例。

const net = require('net');
const server = net.createServer((socket) => {
  console.log('客户端已连接');
});

我们可以使用 write 方法向套接字发送数据。我们传递一个我们选择的字符串,它被发送到客户端。

const net = require('net');
const server = net.createServer((socket) => {
  console.log('客户端已连接');

  socket.write('来自 TCP 服务器的问候!');
});

当从客户端接收到数据时,会触发 data 事件。

const net = require('net');
const server = net.createServer((socket) => {
  console.log('客户端已连接');

  socket.write('来自 TCP 服务器的问候!');

  socket.on('data', (data) => {
    console.log('收到:', data.toString());
  });
});

当套接字完全关闭时,会发生 end 事件。这意味着通信已结束。

const net = require('net');
const server = net.createServer((socket) => {
  console.log('客户端已连接');

  socket.write('来自 TCP 服务器的问候!');

  socket.on('data', (data) => {
    console.log('收到:', data.toString());
  });

  socket.on('end', () => {
    console.log('客户端已断开连接');
  });

  // 处理错误
  socket.on('error', (err) => {
    console.error('错误:', err.message);
  });
});

设置服务器将监听的端口和地址。

const PORT = 3500;
const HOST = '0.0.0.0';

最后,要启动服务器,请使用 .listen() 方法。它需要端口号和地址。现在我们的服务器正在运行并等待新连接。

const net = require('net');
const server = net.createServer((socket) => {
  console.log('客户端已连接');

  socket.write('来自 TCP 服务器的问候!');

  socket.on('data', (data) => {
    console.log('来自客户端的消息:', data.toString());
  });

  socket.on('end', () => {
    console.log('客户端已断开连接');
  });

  // 处理错误
  socket.on('error', (err) => {
    console.error('错误:', err.message);
  });
});

const PORT = 3500;
const HOST = '0.0.0.0';

server.listen(PORT, HOST);

listen 方法还接受一个 callback 参数,当 listening 事件被触发时调用,指示服务器已开始监听传入连接。我们使用此事件来打印一条消息,让我们知道服务器已启动并正在运行。

server.listen(PORT, HOST, () => {
  console.log(`服务器正在监听 ${HOST}:${PORT}`);
});

运行服务器:

使用以下命令启动服务器:

node server.js

你应该看到消息:

服务器正在监听 0.0.0.0:3500

连接到服务器:

要测试我们的 TCP 服务器,我们可以使用 telnet 命令。打开一个新终端并运行以下命令:

telnet 0.0.0.0 3500

你应该看到消息:

来自 TCP 服务器的问候!

或者,我们可以编写一个小文件 client.js 来测试我们的服务器。

const net = require("net");

const client = net.connect({ port: 3500 }, () => {
  console.log("连接已建立");
  client.write("来自客户端的问候");
});

client.on("data", (data) => {
  console.log("来自服务器的消息:", data.toString());
});

client.on("end", () => {
  console.log("已从服务器断开连接");
});

使用以下命令运行它:

node client.js

结论:

在本文中,我们在 Node.js 中创建了一个简单的 TCP 服务器,该服务器接受来自客户端的连接、处理数据并发送响应。这是一个可以根据你的需要扩展和改进的基本示例。你可以添加身份验证、数据存储、命令处理等。此示例的完整代码可在 GitHub Gist 上找到。

如果你有任何问题或建议,请随时通过社交媒体与我联系。编码愉快!

继续阅读

加入我们的社区