我正在尝试使用以下命令逐行发送文件:
nc host port < textfile
cat textfile | nc host port
Run Code Online (Sandbox Code Playgroud)
我尝试过使用tail和head,但结果相同:整个文件作为唯一的行发送.服务器正在侦听特定守护程序以接收数据日志信息.
我想逐个发送和接收这些行,而不是一次性发送整个文件.
我怎样才能做到这一点?
你必须使用netcat吗?
cat textfile > /dev/tcp/HOST/PORT
Run Code Online (Sandbox Code Playgroud)
也可以满足你的目的,至少用bash.
我想逐个发送和接收这些行,而不是一次性发送所有文件.
尝试
while read x; do echo "$x" | nc host port; done < textfile
Run Code Online (Sandbox Code Playgroud)
使用 stdbuf -oL 调整标准输出流缓冲。如果 MODE 为“L”,则相应的流将被行缓冲:
stdbuf -oL cat textfile | nc host port
Run Code Online (Sandbox Code Playgroud)
OP不清楚是否需要为每条线路建立新的连接。但是基于OP在这里的评论,我认为他们的需求与我的不同。但是,Google会将有我需要的人发送到这里,因此我将在这里放置这种选择。
我需要通过单个连接逐行发送文件。基本上,这是“慢”的cat
。(这将是许多“对话”协议的普遍需求。)
如果我尝试发送一封电子邮件给nc
我,则会出现错误,因为服务器无法与我进行“对话”。
$ cat email_msg.txt | nc localhost 25
554 SMTP synchronization error
Run Code Online (Sandbox Code Playgroud)
现在,如果我将a slowcat
插入管道,则会收到电子邮件。
$ function slowcat(){ while read; do sleep .05; echo "$REPLY"; done; }
$ cat email_msg.txt | slowcat | nc localhost 25
220 et3 ESMTP Exim 4.89 Fri, 27 Oct 2017 06:18:14 +0000
250 et3 Hello localhost [::1]
250 OK
250 Accepted
354 Enter message, ending with "." on a line by itself
250 OK id=1e7xyA-0000m6-VR
221 et3 closing connection
Run Code Online (Sandbox Code Playgroud)
该email_msg.txt
如下所示:
$ cat email_msg.txt
HELO localhost
MAIL FROM:<system@example.com>
RCPT TO:<bbronosky@example.com>
DATA
From: [IES] <system@example.com>
To: <bbronosky@example.com>
Date: Fri, 27 Oct 2017 06:14:11 +0000
Subject: Test Message
Hi there! This is supposed to be a real email...
Have a good day!
-- System
.
QUIT
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
17988 次 |
最近记录: |