使用输入/输出命名管道进行 TCP 连接

nof*_*fle 16 bash pipe tcp netcat

我一直在摆弄让这个工作一段时间,所以我怀疑对管道如何工作的某种根本误解是我遇到麻烦的根本原因。

我的目标是通过netcat并在文件系统上有两个命名管道启动到某个远程主机的 TCP 连接:一个进程可以从中读取以获取传入数据,另一个进程可以写入作为传出数据。我目前正在使用以下结构:

mkfifo in
mkfifo out
cat out | netcat foo.bar.org 4000 > in &
Run Code Online (Sandbox Code Playgroud)

从这里开始,我想允许其他进程从这个打开的 TCP 连接读取和写入。这应该“正常工作”,还是有这样的构造不能工作的原因?

什么似乎目前发生的是,我可以读取out没有问题,但是当我写到in我得到的输出提一个破碎的管道和所有后续通信似乎是死了。想法?

(相关:我最初使用的是:

netcat foo.bar.org 4000 < out > in &
Run Code Online (Sandbox Code Playgroud)

但发现它阻塞等待输入。我对此也很好奇,但最好在单独的问题中解决。)

Ste*_*day 6

cat out | netcat foo.bar.org 4000 > in &
Run Code Online (Sandbox Code Playgroud)

我认为问题是它cat一旦EOFout管道接收到就会退出。当cat退出时,管道的其余部分(包括netcat)也将终止。

试试这样的:

while true; do cat out; done | netcat foo.bar.org 4000 > in &
Run Code Online (Sandbox Code Playgroud)

因此,cat根据需要经常重新启动,并且管道中EOF出现的任何sout都得到有效处理。