(原) 用Croc跨平台、跨内外网实现文件上传服务器

注意:原创文章,请后转载,转载需注明出处。

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

相关文章