在 HostA 上,我有一个procA
执行 I/O 的进程 ,如下所示:
#!/bin/bash
while sleep 1 ; do
# Consume input *if available*
if read -t 0.5 x; then # a timed-read
# If input is available, output it.
echo "HostA Input: $x"
fi
# Produce some output.
echo "HostA Output: $(date)"
done
在 HostB 上,我有一个非常相似的过程,procB
唯一的区别是用前缀(而不是前缀)procB
标记它的输入/输出。HostB
HostA
现在,我想使用netcat/usr/bin/nc
程序(我对这一切的期望是 HostA 的输出应该出现在 HostB 上,而 HostB 的输出应该出现在 HostA 上......就像在以下点对点聊天的规范示例中发生的那样:procA
procB
procB
procA
nc
[HostB]$ nc -l 4000
[HostA]$ nc HostB 4000
但是,当我尝试通过用进程替换两个主机上的人来扩展上述规范示例时,procA
如下procB
所示,它不起作用:
在HostB上:
$ mkfifo p
$ ./procB <p | nc -l 4000 >p
<WHY NO OUTPUT HERE??>
并且,在HostA上:
$ mkfifo p
$ ./procA <p | nc HostB 4000 >p
<WHY NO OUTPUT HERE??>
笔记:
- 我已验证 HostB 上的端口 4000 已打开。
- 单向通信,如下所示,似乎有效:
在HostB上:
$ mkfifo p
$ ./procB <p | nc -l 4000 >p
在HostA上:
$ ./procA | nc HostB 4000
HostB Output: Wed Jan 11 13:53:37 IST 2012
HostB Output: Wed Jan 11 13:53:39 IST 2012
HostB Input: HostA Output: Wed Jan 11 13:55:02 IST 2012
HostB Output: Wed Jan 11 13:53:40 IST 2012
HostB Input: HostA Output: Wed Jan 11 13:55:04 IST 2012
HostB Output: Wed Jan 11 13:53:41 IST 2012
HostB Input: HostA Output: Wed Jan 11 13:55:05 IST 2012
HostB Output: Wed Jan 11 13:53:42 IST 2012
^C
现在,我知道它nc
带有一个 INSECURE 选项-e
,如果在您的二进制文件中启用它可以以某种方式使用nc
,但假设我没有可用的-e
选项,我如何通过 2 个远程进程相互连接nc
?基本上,我在上面哪里出错了?为什么我上面指出的地方没有输出?提前谢谢了。