使用毫秒间隔的Netcat

8
我试图使用netcat每隔几毫秒读取文件中的一行,并将其发送到一个端口。根据netcat的文档,我知道可以在每个发送的行之间插入时间间隔:
以下是来自netcat帮助手册的内容:
- -i secs 延迟发送行、扫描端口的间隔时间
我尝试了以下方法,可以让我在每个发送的行之间插入最少1秒的时间间隔。
nc -q 10 -i 1 -lk 9999 < file_input

我想知道是否有办法将这个时间间隔缩短到毫秒级别。也许可以通过使用某些工具将文件输入流管道传输到netcat,并允许配置每个读取之间的时间间隔为几毫秒来实现?
1个回答

13

使用 GNU Coreutils 中的 sleep 命令可以让程序等待小数秒。因此,您可以尝试以下命令:

while read -r line ; do echo "$line"; sleep 0.001; done < "/path/to/file" | nc host port

在每个循环中,变量“line”保存文件的一行,该行通过 netcat 发送到主机“host”的端口“port”。发送一行后,代码会等待0.001秒,直到没有更多要发送的数据为止。

有关 sleep 命令等待几分之一秒的能力的更多信息,请参见“如何在bash或ksh中睡眠一毫秒”。


顺便问一下,你有没有想过如何跟踪已读取的行数?比如说,如果我可以同时输出到netcat和stdout。 - tsar2512
引入一个计数器变量并将其输出到stderr;stdout已经被发送到netcat。类似这样的代码应该可以工作:COUNT=0; while read -r line ; do echo "$line"; let "COUNT+=1"; echo $COUNT >&2; sleep 0.001; done < "/path/to/file" | nc host port - Adrian Zaugg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接