我想使用文件作为临时缓冲区来连接两个 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