【发布时间】:2022-02-14 11:41:41
【问题描述】:
将这段代码想象成 NAT-ted 服务 (input) 和想要与 input 通信的外部服务 (output) 之间的中继。
此中继位于公共服务器上,并打开两个端口以进行中继:
- 端口
4040其中input连接并转发来自目标服务的TCP 流量 - 端口
4041一些外部客户端连接到中继
中继应该将它从端口4040 上的input 接收到的内容传送到端口4041 上的外部客户端。
我可以看到两个服务都连接到中继,但数据流在之后停止,我怀疑输出套接字正在关闭。在下面的示例中,我使用了stream.pipeline,但我也直接在套接字上尝试了简单的.pipe,结果相同
从“网络”导入网络 从“流”导入流;
export default () => {
const inputServer = net.createServer();
const outputServer = net.createServer();
inputServer.listen(4040, "0.0.0.0", () => {
console.log('TCP Server is running on port ' + 4040 + '.');
});
outputServer.listen(4041, "0.0.0.0", () => {
console.log('TCP Server is running on port ' + 4041 + '.');
});
let inSocket = null;
inputServer.on('connection', (sock) => {
inSocket = sock;
});
outputServer.on('connection', (sock) => {
if (inSocket) {
stream.pipeline(inSocket, sock, (err) => {
if (err) {
console.error('Pipeline failed.', err);
} else {
console.log('Pipeline succeeded.');
}
})
stream.pipeline(sock, inSocket, (err) => {
if (err) {
console.error('Pipeline failed.', err);
} else {
console.log('Pipeline succeeded.');
}
})
}
});
}
我的目标是为输入服务保持一个开放的套接字,并连接任何输出的继电器。
【问题讨论】: