nodejs监听tcp端口

2025-04-14 16

Image

nodejs监听tcp端口

在Node.js中,监听TCP端口可以通过内置的net模块来实现。如何使用Node.js监听TCP端口,并提供详细的代码示例和多种解决方案。

解决方案

通过Node.js的net模块,我们可以创建一个TCP服务器来监听指定的端口。基本步骤包括:引入net模块、创建服务器实例、绑定端口并启动监听。我们还可以处理客户端连接、接收数据、发送数据以及关闭连接等操作。


方法一:使用net模块创建TCP服务器

这是最常见也是最直接的方法,以下是具体实现步骤:

  1. 引入net模块。
  2. 使用net.createServer()方法创建服务器。
  3. 绑定端口并开始监听。
  4. 处理客户端连接、数据接收和断开连接事件。

示例代码

javascript
const net = require('net');</p>

<p>// 创建TCP服务器
const server = net.createServer((socket) => {
    console.log('客户端已连接');</p>

<pre><code>// 监听数据接收事件
socket.on('data', (data) => {
    console.log(`收到数据: ${data}`);
    socket.write('服务器已收到你的消息!');
});

// 监听客户端断开事件
socket.on('end', () => {
    console.log('客户端已断开');
});

// 捕获错误
socket.on('error', (err) => {
    console.error('发生错误:', err);
});

});

// 监听端口
server.listen(8080, () => {
console.log('TCP服务器正在监听端口 8080...');
});

说明

  • net.createServer():创建一个TCP服务器。
  • socket.on('data'):当接收到数据时触发。
  • socket.write():向客户端发送数据。
  • socket.on('end'):当客户端断开连接时触发。

方法二:使用async/await简化异步逻辑

如果需要更优雅地处理异步逻辑,可以结合util.promisifyasync/await来实现。

示例代码

javascript
const net = require('net');
const util = require('util');</p>

<p>// 创建TCP服务器
const server = net.createServer();</p>

<p>// 将listen方法转换为Promise形式
server.listenAsync = util.promisify(server.listen);</p>

<p>(async function startServer() {
    try {
        await server.listenAsync(8080);
        console.log('TCP服务器正在监听端口 8080...');
    } catch (err) {
        console.error('服务器启动失败:', err);
    }
})();</p>

<p>// 处理客户端连接
server.on('connection', (socket) => {
    console.log('客户端已连接');</p>

<pre><code>socket.on('data', (data) => {
    console.log(`收到数据: ${data}`);
    socket.write('服务器已收到你的消息!');
});

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

socket.on('error', (err) => {
    console.error('发生错误:', err);
});

});

说明

  • 使用util.promisifyserver.listen方法转换为Promise形式,从而可以用async/await语法简化异步逻辑。
  • 这种方式使代码更加清晰,尤其适合复杂的异步场景。

方法三:支持多个客户端并发连接

在实际应用中,服务器可能需要同时处理多个客户端连接。Node.js的事件驱动模型天然支持高并发,因此无需额外修改即可支持多客户端连接。

示例代码

javascript
const net = require('net');</p>

<p>// 创建TCP服务器
const server = net.createServer();</p>

<p>// 存储所有客户端的socket对象
const clients = [];</p>

<p>server.on('connection', (socket) => {
    console.log('新客户端已连接');</p>

<pre><code>// 将当前socket加入客户端列表
clients.push(socket);

// 发送欢迎消息
socket.write('欢迎连接到服务器!n');

// 接收数据
socket.on('data', (data) => {
    console.log(`收到数据: ${data}`);
    socket.write('服务器已收到你的消息!');
});

// 客户端断开时移除socket
socket.on('end', () => {
    console.log('客户端已断开');
    clients.splice(clients.indexOf(socket), 1);
});

// 捕获错误
socket.on('error', (err) => {
    console.error('发生错误:', err);
    clients.splice(clients.indexOf(socket), 1);
});

});

// 广播消息给所有客户端
function broadcastMessage(message) {
clients.forEach((client) => {
if (client.writable) {
client.write(message);
}
});
}

// 启动服务器
server.listen(8080, () => {
console.log('TCP服务器正在监听端口 8080...');
});

说明

  • 使用clients数组存储所有连接的客户端socket对象。
  • 提供broadcastMessage函数,用于向所有客户端广播消息。
  • 在客户端断开或发生错误时,从clients数组中移除对应的socket对象。

三种使用Node.js监听TCP端口的方法:
1. 基于net模块的基本实现。
2. 结合async/await简化异步逻辑。
3. 支持多客户端并发连接的实现。

根据实际需求选择合适的方案。对于简单的应用场景,种方法已经足够;而对于需要处理复杂业务逻辑或高并发的情况,则可以选择后两种方法。

1. 本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!cheeksyu@vip.qq.com
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
4. 如果您也有好的资源或教程,您可以投稿发布,成功分享后有积分奖励和额外收入!
5.严禁将资源用于任何违法犯罪行为,不得违反国家法律,否则责任自负,一切法律责任与本站无关

源码下载