You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中stdin的data事件未触发,求问题排查方案

问题分析与解决

核心问题

你的server端代码犯了流方向的错误:process.stdin是可读流(Readable),仅用于读取终端输入,不能作为其他可读流的写入目标。但你执行了socket.pipe(input),尝试把作为可读流的socket数据写入另一个可读流stdin,这完全不符合Node.js流的使用规则,导致stdin根本收不到任何数据,data事件自然不会触发。

修正方案

如果需要在server端处理客户端发来的数据,直接监听socket的data事件即可,无需通过stdin中转。修改后的server.js如下:

const net = require('node:net');
const { stdout: output } = require('node:process');

const TCPServer = net.createServer().listen({port: 3000});

TCPServer.on('connection', (socket) => {
    // 直接监听socket的data事件处理客户端数据
    socket.on('data', (chunk) => {
        console.log('data arrived');
        // 可选:把数据输出到终端验证
        output.write(chunk);
    });
});

注:如果你的需求是将客户端数据转发到server端stdin(该场景非常少见,因为stdin的设计初衷是读取用户终端输入),需要额外创建可写流模拟stdin输入,但这并非常规用法,不推荐。

验证效果

修改后启动server和client,在client终端输入内容,server端会打印data arrived,同时输出客户端发来的数据,符合预期。

内容的提问来源于stack exchange,提问作者BoB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 15:22:07