![如何使用两个 netcat 写入和读取同一个文件?](https://linux22.com/image/716108/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E4%B8%A4%E4%B8%AA%20netcat%20%E5%86%99%E5%85%A5%E5%92%8C%E8%AF%BB%E5%8F%96%E5%90%8C%E4%B8%80%E4%B8%AA%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我想使用文件作为临时缓冲区来连接两个 netcat 进程。我需要使用缓冲区,因为数据在两端以不同的间隔发送和请求。我想使用文件而不是实际缓冲区,mkfifo
因为数据通常会超过 64 kb。
这是我所拥有的,但它不起作用。文件从未被写入,或者至少,它没有以发布者进程可以读取的方式写入。
# receiver
while true; do nc -l 8000 > /tmp/my_file; done
# publisher
while true; do nc -l 9000 < /tmp/my_file; done
我向接收者发送如下文本:
echo "hello, world" | nc localhost 8000
我尝试从发布者的角度来阅读它,如下所示:
curl localhost:9000
但是curl
返回“来自服务器的空回复”之类的错误,因为从未写入过“hello, world”。
我正在 Mac OS 中测试这个,但最终需要在 Linux(最有可能是 Alpine)中执行同样的事情。
答案1
在某些系统上,“nc”命令要求您在端口号前指定“-p”选项。尝试在 8000 和 9000 前添加“-p”,如下所示:
# receiver
while true; do nc -l -p 8000 > /tmp/my_file; done
# publisher
while true; do nc -l -p 9000 < /tmp/my_file; done