Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我的Node.js服务器会回显我从nc发送给它的所有内容?_Node.js_Netcat_Unix Socket - Fatal编程技术网

为什么我的Node.js服务器会回显我从nc发送给它的所有内容?

为什么我的Node.js服务器会回显我从nc发送给它的所有内容?,node.js,netcat,unix-socket,Node.js,Netcat,Unix Socket,我是Node.js新手,我正在尝试通过构建一个侦听Unix域套接字的服务器来学习。我正在使用“nc”作为客户端测试服务器。”nc-U/var/run/ipc.sock“一切都进行得很顺利,除了我在nc中键入的任何内容都会得到响应 如下所示(caps中的文本是来自服务器的响应。混合大小写输入nc): 我不知道我键入的所有内容的回显是我在服务器代码中遗漏的某个设置,还是nc的设置。我已经浏览了nodejs.org上的net.createServer页面和FreeBSD服务器上的nc手册页面。不走运

我是Node.js新手,我正在尝试通过构建一个侦听Unix域套接字的服务器来学习。我正在使用“nc”作为客户端测试服务器。”nc-U/var/run/ipc.sock“一切都进行得很顺利,除了我在nc中键入的任何内容都会得到响应

如下所示(caps中的文本是来自服务器的响应。混合大小写输入nc):

我不知道我键入的所有内容的回显是我在服务器代码中遗漏的某个设置,还是nc的设置。我已经浏览了nodejs.org上的net.createServer页面和FreeBSD服务器上的nc手册页面。不走运

这是我的服务器的代码:

'use strict';
const fs = require('fs');
const net = require('net');

const socket = '/var/run/ipc.sock';

// ISO date-time stamp and a separator for logging.
function stamp(msg) {
  var d = new Date();
  return d.toISOString() + ' ' + msg;
}

// Create a Unix-domain IPC server to receive and execute commands.
const server = net.createServer((c) => {
  console.log(stamp('Client connect.'));
  c.write('READY\n');
  c.pipe(c);

  c.on('data', (d) => {
    if (d.slice(-1) == '\n') d = d.slice(0, -1);  // like Perl chomp()
    console.log(stamp('Data received: ' + d.toString()));
    c.write('OK\n');
  });

  c.on('end', () => {
    console.log(stamp('Client disconnect.'));
  });
});

// Start listening on a socket restricted to user:group.
server.listen(socket, () => {
  fs.chmod(socket, 0o660, (e) => {
    if (e) throw e;
  });
  console.log(stamp('Server listening.'));
});

// Error handler (specifically for stale socket due to unclean shutdown.)
server.on('error', (e) => {
  if (e.code == 'EADDRINUSE')
    console.error('Stale socket detected. Remove ' + e.address + ' and try again.'
);
  else throw e;
});

// Catch SIGINT and SIGTERM in order to exit cleanly.
function sigHandler(s) {
  if (s == 'SIGINT' || s == 'SIGTERM') {
    console.log(stamp('Caught signal: ' + s + '.'));
    process.exit(0);
  }
}
process.on('SIGINT', sigHandler);
process.on('SIGTERM', sigHandler);

// Clean up socket on exit.
process.on('exit', (c) => {
  console.log(stamp('Shutdown.'));
  fs.unlink(socket, (e) => {
    console.error(stamp('Unable to remove socket ' + socket));
  });
});
任何帮助都将不胜感激。我使用的是FreeBSD 12.1,这很重要。

代码行:

c.pipe(c)
告诉流
c
将它接收到的所有内容发送回同一流(回显它发送的所有内容)。去掉那条线,它就不会回显所有内容

c.pipe(c)