数据发送后如何自动关闭netcat连接?

数据发送后如何自动关闭netcat连接?

我正在从脚本执行以下命令:

echo '{"hostUp": true}' | sudo /usr/local/bin/netcat localhost 8001

但是,netcat 客户端会一直保持打开状态。发送完这些数据后,我该如何关闭连接?

答案1

在正确的上下文中,其他答案-c-q给出的答案都是正确的,但它可能有助于总结为什么有多个答案并给出更通用的解决方案。

这些不同的选项执行相同的操作,但是是 netcat 的不同实现:

  • -cNetcat 的 GNU 实现
  • -q OpenBSD 的 netcat 实现。
  • -w(其他?)netcat 的 OpenBSD 实现。

-q某些版本要求使用 int 来指定退出和选项前要等待的秒数-w。此 int 必须是> 0>= 0,具体取决于版本。

如果您在多台机器上实现某些功能,但不确定它们是否使用相同的 netcat 实现,那么您可以考虑将 netcat 调用与程序包装在一起,timeout以便在几秒钟后杀死 netcat。

timeout 5 echo '{"hostUp": true}' | netcat localhost 8001

这种方法有点笨拙,因为无论是否成功发送数据,它都会对 netcat 的执行设置上限,但如果您发送少量数据并且有几秒钟的空闲时间,那么这应该适用于任何 netcat 实现。

答案2

您可以使用-q参数,但这也会导致netcat服务器关闭。

$ echo '{"hostUp": true}' | sudo /usr/local/bin/netcat -q 5 localhost 8001    

答案3

就我而言,我在 Mac 上通过 Homebrew(v 0.7.1)安装的 netcat 副本没有 -q 选项,但我能够使用 -c 选项在 STDIN EOF 上关闭并将整个命令置于循环中:

while true ; do printf 'HTTP/1.1 200 OK\r\n\r\ncool, thanks' | netcat -l -c -p 8888 ; done

答案4

我正-N为了这个目的在 ubuntu 20.04 上工作。

相关内容