croc是golang开发的跨平台文件传送工具。不仅如此,还实现了跨内外网的文件/文本传输。
之前的文章就提到可以将此实现:跨平台的文件上传服务器。这里的服务器还可以是内网服务器。
服务器脚本server.sh
#!/bin/bash
while true; do
croc_pass=$(cat ./croc_pass.txt)
#echo $croc_pass
croc --overwrite --yes $croc_pass
sleep 5s
done
这里是将croc_pass.txt中的内容作为croc的传输密码。若客户端上传修改内容的croc_pass.txt文件,即实现了由客户端来动态修改。
服务器在接收到一个文件后,即等待下一次发送。若没有需要传输的文件,会显示超时。
而客户端就是常规的使用:croc send –code 123123 文件名
对比其它上传方案,如FTP、SCP,最大的特点在于可以对内网服务器进行传输。存在的问题是不支持命令。
或许通过croc的文本传送功能,也能实现类似命令效果。
进一步发现
在发送文本的指令中:
发送端:croc send –code 123123 –text “这是什么what”
接收端:croc –yes –overwrite 123123 | awk ‘{print $0}’
意即可以将接收端获取的文本信息赋值给变量
croc两种传送内容:文件、文本。当传送文件时,变量不能获取到内容。
这里利用此特点来判断是否为传送的文本。当传送为文本时,当作指令来执行。
下面代码仅是执行了指令,并没有返回给客户端。这需要客户端也开个服务器来接收发过来的反馈信息。
这样,一个交互就完成了。
修改服务端代码
#!/bin/bash
while true; do
croc_pass=$(cat ./croc_pass.txt)
echo $croc_pass
info=`croc --overwrite --yes $croc_pass`
if [ "$info" != "" ]; then
echo "指令:" $info
ret=`$info`
echo $ret
fi
sleep 5s
done