通过TCP/IP流式传输一个不断增长的文件

8
我正在处理一个项目,其中一块硬件正在产生输出,并持续将其写入文本文件中。我需要做的是在简单的TCP/IP连接上即时转发该文件。
目前,我正在尝试使用简单的netcat来进行操作,但是netcat只会发送执行时已经写入的部分文件,而不会继续发送其余部分内容。
现在,我有一个服务器在端口9000上监听netcat(仅供测试用途)。
netcat -l 9000

发送命令为:

netcat localhost 9000 < c:\OUTPUTFILE

据我理解,netcat应该实际上是在流式传输文件,但一旦发送了开始执行时存在的所有内容,它就会停止。它不会中断连接,而只是停止发送新数据。

我该如何让它持续地流式传输数据呢?


命名管道?http://zh.wikipedia.org/wiki/命名管道 - Imre L
3个回答

11

尝试:

tail -F /path/to/file | netcat localhost 9000

2
是的,就是这样做了。我在Win 2003资源工具包中找到了tail命令。像魔法一样运行起来。我将命令更改为 tail -f c:\out | netcat localhost 9000谢谢! - Grinner
3
有一次聪明人说过,使用-F而不是-f,因为它将添加额外的选项以在服务重新启动或生成新日志的情况下进行重试! - Waheed
除非按照@Grinner的评论所描述进行了修改,否则这不可能正常工作(而且如果没有那个修改就不应该被标记为已接受)。<指定输入应该从名为 tail 的文件中读取,而不是从一个名为 tail命令中读取。 - Charles Duffy
大家随意进行编辑并根据需要进行调整。 - Freiheit

1
尝试:
tail /var/log/mail.log -f | nc -C xxx.xxx.xxx.xxx 9000

1
为了获得额外的分数,最好包括一些代码解释以及为什么这可以解决OP的问题。 - SiKing
-f 应该在文件名之前,以便与严格遵守 POSIX 实用程序语法指南 条目 #9 的 tail 版本一起使用,该条目指定所有选项都应在操作数之前。 - Charles Duffy

-1

尝试nc

# tail for get last text from file, then find the lines that has TEXT and then stream
# see documentation for nc, -l means create server, -k means not close when client disconnect, waits for anothers clients
tail -f  /output.log | grep "TEXT" | nc -l -k 2000

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