索性就开始想,能不能使用C/S这种最直接的方式,C随意,S,直接用WEB服务,实践来源于想法,开始干活;
[color=rgba(0, 0, 0, 0.85)]服务端用这:
image.png (20.45 KB, 下载次数: 0)
下载附件
S0
2023-3-20 20:37 上传
客户端用wget.exe
image.png (35.56 KB, 下载次数: 0)
下载附件
C0
2023-3-20 20:39 上传
经历过各种测试,最终编写BUG代码如下:
[Asm] 纯文本查看 复制代码@Echo Off&Setlocal Enabledelayedexpansion
For /f "delims=" %%i in ('curl -s "http://127.0.0.1/update.ini"') do (Set "wpwd=%%i")
@echo 000=!wpwd!
FOR /F "delims=" %%s IN (update.ini) do (Set "lpwd=%%s")
@echo 111=!lpwd!
if !wpwd!==!lpwd! (goto yes) else goto no
@pause >nul
@exit
:yes
@Del /Q *.tmp>nul |del /Q wmv>nul
@echo 无需更新
@pause >nul
@exit
@:no
@echo 正在更新
@wget -q -nv -N -r -nd -np -nH -R index.htm,index.html http://127.0.0.1
@del /Q *.tmp >nul |del /Q wmv >nul
@echo 更新已完成
@pause >nul
@cksum *.* >su.tmp
@cat su.tmp | tr -d '\r\n" "`’>update.ini
@del /Q su.tmp
@exit
这里调用curl 参数-S 去读取WEB端的校验文件,相当于FC了,文件无变化,删除临时文件并退出,校验文件有变化,启动WGET下载,这里没有用断点续传,是因为发现影音文件多次覆写同名文件,会无法播放。【这是BUG,到目前还没解决】
S端 建立 info.bat 如下
[Asm] 纯文本查看 复制代码del /Q update.ini
cksum *.* >su.tmp
cat su.tmp | tr -d '\r\n" "`’>update.ini
del /Q su.tmp
原理:服务端启动删除校验文件,依赖 cksum 生成当前目录下所有文件的 crc32值 写入临时文件并利用 cat 和 tr 删除掉临时文件中的空格和换行并生成最总的校验文件。
客户端调用CURL读取指定URL校验文件内容并对比本地校验文件,无差异,退出,有差异,启动WGET开始递归下载
这里用到了 linux转WIN的一些小工具 【unxutils】
BUG不少,目前找不到方法去修复。
1. 无法下载中文名文件
2. 文件变化小于1KB,可能更新失败
具体效果,可以自己去测,文件我打包好了,具体看附件了
下载看我.txt
(56 Bytes, 下载次数: 6)
2023-3-20 21:01 上传
点击文件名下载附件
下载积分: 吾爱币 -1 CB