作为该堆栈溢出问题的一个副产品,我希望对它进行归档,但要进行一些调整。
我想连接到主机,逐行发送二进制文件,并且每行之间有几秒钟的延迟...而且它必须处于同一连接中。 我要发送的字符串主要是基于文本的,但该行中有两个不可打印的字符。
这是我要发送的字符串/行的示例(每个文件数千行):
e00326513,6598,no,8,,2z
值是十六进制值0x00 。
我已经从第一个条目中删除了我的问题,但是@mzet在我最初的问题上回答了我,因为那时我的问题是纯文本的,但是后来我发现我的字符串里面有这些0x00字符,我一开始看不到。 我想以他的答案为基础,因为我认为这几乎可以奏效,但是可能需要进行调整,所以这是他的贡献,而不是我的贡献。
如果我有3行的文件:
e00370513,6598,no,8,,2z
f00891548,6598,yes,8,,3z
f00129525,6598,yes,8,,2z
然后我以为可以调整@mzet答案,并用\\x00替换文件中的值,并在echo命令上设置-e :
[root@srv]# mkfifo /tmp/fifoIn; cat /tmp/fifoIn | nc localhost 2222 &
[root@srv]# cat myfile | while read line; do echo -ne $line; sleep 2; done > /tmp/fifoIn
当我这样做时,我可以在服务器端看到x00 :
[root@srv]# nc -l 2222
x00ex00x0000370513,6598,no,8,,2zx00
x00fx0000891548,6598,yes,8,,3zx00
x00fx00x0000129525,6598,yes,8,,2zx00
是否可以根据需要发送二进制(文本?)文件? 如果无法逐行发送文件,那么是否可以发送一个字符串数千次? 完全有必要,它们不必是唯一的,也不必在文件中,因为我可以使用相同的字符串重复自身来进行管理。
编辑#1
为什么我的脚本在发送后仅向服务器发送一行(我希望有4行),之后它才永远暂停(?)。 客户端(也不是服务器)关闭其连接,但没有任何错误:
rm -f /tmp/fifofile
mkfifo /tmp/fifofile
cat /tmp/fifofile | nc 192.168.20.6 5000 &
sleep 1
i="0"
while [ $i -lt 4 ]
do
echo "$i"
echo -ne "\x00e\x00\x00001212dsfdsfdsfsdfsdfsdfdsf\x00" | tee /tmp/fifofile
sleep 1
i=$[$i+1]
done