中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 迅雷下载后关机 上一主题 | 下一主题
gool123456
初级用户




积分 89
发帖 76
注册 2009-12-13
状态 离线
『楼 主』:  迅雷下载后关机

多谢各位的建议,判断的准确度已经进一步了。

这个P处理用处不大,在这只做参考。。

代码是以迅雷5写的,如果你不是用迅雷5的,请把名字改成你的下载器名。已经

测试过其他下载器同样可以,只要把下载器的名字替换掉以下的Thunder5.exe
即可。

把以下代码保存为“迅雷关机监控.bat”:


@echo off&setlocal EnableDelayedExpansion
::迅雷关机监控 code by gool123456 @ 2010
::============================
mode con cols=50 lines=10
title 迅雷关机监控 code by gool123456
set /p dir_=把需要监控的文件夹拖入(当前文件夹直接回车):
if "%dir_%"=="" set "dir_=%cd%"
set "dir_=%dir_:"=%"
cd.>"c:\temp.txt"
dir "%dir_%" /a-d /b>>"c:\temp.txt"
for /f "delims=:" %%a in ('dir "%dir_%" /a-d /b^|findstr /n .') do (set /a "ge=%%a")
:begin
echo 下载未进行.等待开始...
ping 127.1 -n 3 >nul&cls
:jj
for /f "delims=:" %%b in ('dir "%dir_%" /a-d /b^|findstr /n .') do (set /a "ge1=%%b")
if !ge1! GTR !ge! goto :xiazai
if !ge1! equ !ge! goto :begin
:xiazai
ping 127.1 -n 3 >nul&cls
<nul set/p= 当前时间 : %time%   &set/p=已耗时:%tm%秒<nul
set /a link=0
for /f "tokens=2" %%i in ('tasklist /fi "imagename eq Thunder5.exe" /nH 2^>nul^|findstr /i "Thunder5.exe"') do (
set id=
set /a id=%%i
if "!id!"=="" goto :sa
for /f "tokens=4" %%y in ('netstat -anop tcp^|findstr /e /c:"!id!"') do (
if "%%y"=="" goto :eof
if "%%y"=="ESTABLISHED" (set /a link=!link!+1)
)
)
if !link! GEQ 4 (echo.&echo.&echo 迅雷下载中.....) else (echo.&echo.&echo 尝试连接.继续等待...)
:sa
set new=
set /a tm+=3               
if not "!link!"=="0" (echo.&echo  当前共!link!个连接 & goto :jj) else (
for /f "delims=" %%h in ('dir "%dir_%\*.td" "%dir_%\*.td.cfg" /a-d /b 2^>nul') do (
if "%%h"=="" (goto :sd)
findstr /x /c:"%%h" c:\temp.txt >nul||set /a new+=1
)
set /a txt=%ge1%-%ge%
if !txt! equ !new! (goto :jj)
)
:sd
shutdown /f /s /c "^-^下载完毕!正在执行关机 "
:un
cls&set /p undown=如果你还未进行下载,请输入n来取消关机,否则不输入:
if /I "%undown:~0,1%"=="n" (shutdown -a &echo 你取消关机,请按任意键退出..&pause>nul) else (goto :un)


[ Last edited by gool123456 on 2010-5-6 at 21:49 ]



Discuz! 现在时间
2010-4-24 21:01
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
gool123456
初级用户




积分 89
发帖 76
注册 2009-12-13
状态 离线
『第 2 楼』:  

= = 发上去的文件忘了改成论坛名了 呵呵。



Discuz! 现在时间
2010-4-24 21:06
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
exzzz
初级用户

游手好闲 + 无所事事 ..



积分 194
发帖 167
注册 2007-4-30
状态 离线
『第 3 楼』:  

这个批处理是相当的无聊。。。


你还不如写个更简单实用的,自动监控迅雷下载任务,完成后自动转移到其他目录,避免迅雷上传,影响网速。



  
2010-4-24 22:39
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
rs369007
初级用户





积分 147
发帖 131
注册 2008-9-22
状态 离线
『第 4 楼』:  

大致看了下,楼主可能对网络协议不是很懂(其实我也不是很懂)
SYN_SENT:是在用connect 函数发起连接
ESTABLISHED:表示一个tcp连接经过三次握手后已经建立完毕,可以开始通信

你的判断的应该先排除迅雷与迅雷服务器的连接,
netstat 显示的tcp状态似乎没有能判断这个端口是否是正在传送数据,建立起tcp连接后程序可以通过某端口“随时”发送数据,状态还是ESTABLISHED,所以不能说tcp状态为ESTABLISHED,就说迅雷在下东西了。

[ Last edited by rs369007 on 2010-4-24 at 23:26 ]



  freedom!
2010-4-24 23:16
查看资料  发短消息 网志   编辑帖子  回复  引用回复
gool123456
初级用户




积分 89
发帖 76
注册 2009-12-13
状态 离线
『第 5 楼』:  



  Quote:
Originally posted by exzzz at 2010-4-24 22:39:
这个批处理是相当的无聊。。。


你还不如写个更简单实用的,自动监控迅雷下载任务,完成后自动转移到其他目录,避免迅雷上传,影响网速。

这个批处理也是有个朋友想通过迅雷下载完毕后,通过批处理或者不用第3方软件当迅雷下完指定任务后可以自动关机。
我在这个功能上加上了一些小功能,其实真正目的是为了下载后能通过它来关机。

而不是真正做个下载器。这也没意思。

你怕上传影响网速,还不如直接KILL了。

[ Last edited by gool123456 on 2010-4-25 at 14:01 ]



Discuz! 现在时间
2010-4-25 00:11
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 6 楼』:  

本身不是有这个功能麽?



S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
2010-4-25 15:11
查看资料  发短消息 网志   编辑帖子  回复  引用回复
gool123456
初级用户




积分 89
发帖 76
注册 2009-12-13
状态 离线
『第 7 楼』:  



  Quote:
Originally posted by slore at 2010-4-25 15:11:
本身不是有这个功能麽?

是有的,在迅雷的“工具”菜单里。
但用批处理监控也不错。优点是监控是否有连接的,不用等待连接断开请求。

[ Last edited by gool123456 on 2010-4-25 at 21:44 ]



Discuz! 现在时间
2010-4-25 21:43
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
exzzz
初级用户

游手好闲 + 无所事事 ..



积分 194
发帖 167
注册 2007-4-30
状态 离线
『第 8 楼』:  



  Quote:
Originally posted by gool123456 at 2010-4-25 09:43 PM:

是有的,在迅雷的“工具”菜单里。
但用批处理监控也不错。优点是监控是否有连接的,不用等待连接断开请求。

[ Last edited by gool123456 on 2010-4-25 at 21:44 ]

如楼上某位所言,你没有考虑到连接服务器的情况,连接到服务器之后,也是有连接建立起来的。


此外,我所说的,监控迅雷已下载完成的任务并转移到其他目录,并不是kill就行。

你还得考虑到迅雷有这2个问题:1、下载后并不会自动退出迅雷。2、某个任务下载完成后,还有其他的任务需要下载,不可以kill迅雷,我需要他下载,不要他上传。

[ Last edited by exzzz on 2010-4-25 at 23:22 ]



  
2010-4-25 23:20
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lena
初级用户





积分 154
发帖 67
注册 2007-12-2
状态 离线
『第 9 楼』:  

迅雷不是有下载完毕自动关机吗?lZ这不是多此一举哇?

2010-4-26 05:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
gool123456
初级用户




积分 89
发帖 76
注册 2009-12-13
状态 离线
『第 10 楼』:  



  Quote:
Originally posted by exzzz at 2010-4-25 23:20:



如楼上某位所言,你没有考虑到连接服务器的情况,连接到服务器之后,也是有连接建立起来的。


此外,我所说的,监控迅雷已下载完成的任 ...

如果是限制迅雷上传的,我在网上搜了下方法有很多。就采用了百科其中一种方法写了一句,可以加上
cd /d "%systemroot%\system32"&&del /q "cid_store.dat"&md "cid_store.dat" & (for %%p in (c: d: e: f: g: h: i: j: k: l:) do (if exist %%p (for /f "delims=" %%f in ('dir /s /a-d /b "%%p\Thunder5.exe"^|findstr /i /c:"\Program\Thunder5.exe"') do (del /q "%%~dpfcid_store.dat" & md "%%~dpfcid_store.dat"))))
[ Last edited by gool123456 on 2010-4-26 at 18:44 ]



Discuz! 现在时间
2010-4-26 18:19
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
gool123456
初级用户




积分 89
发帖 76
注册 2009-12-13
状态 离线
『第 11 楼』:  



  Quote:
Originally posted by rs369007 at 2010-4-24 23:16:
大致看了下,楼主可能对网络协议不是很懂(其实我也不是很懂)
SYN_SENT:是在用connect 函数发起连接
ESTABLISHED:表示一个tcp连接经过三次握手后已经 ...

排除服务器连接似乎很难实现。。按严格来代码中的连接是不准确的,因为我不是计算下载的连接,是所有正常连接。
那个“echo迅雷在下载中..”似乎有点在忽悠别人。。。
判断迅雷是否在下载,目前我还没找到窍门。但如果是FTP下载,其实是可以计算文件大小来判断下载速度的。



Discuz! 现在时间
2010-4-26 18:21
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
gool123456
初级用户




积分 89
发帖 76
注册 2009-12-13
状态 离线
『第 12 楼』:  

写来玩的~



Discuz! 现在时间
2010-4-26 18:52
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
rs369007
初级用户





积分 147
发帖 131
注册 2008-9-22
状态 离线
『第 13 楼』:  



  Quote:
Originally posted by gool123456 at 2010-4-26 18:21:


其实是可以计算文件大小来判断下载....

我就是楼主这个思路,监控文件大小。不过觉得这个任有一些难度和问题。
1,用for 扩展读取文件大小 %%~zi ,如果文件没有下完大小还是整个文件完整的大小。

如果监控链接状态,假设能正常监控数据传输状态,但是传输过程中完全有可能会出现链接被意外终止的情况,这必须被考虑(比如网线接口松了、交换机故障等),超过一定时间链接会被终止。所以建议 监控链接状态与检查文件的完整性。

[ Last edited by rs369007 on 2010-4-26 at 19:15 ]



  freedom!
2010-4-26 18:59
查看资料  发短消息 网志   编辑帖子  回复  引用回复
rs369007
初级用户





积分 147
发帖 131
注册 2008-9-22
状态 离线
『第 14 楼』:  

监控链接刚查了下,在tcp状态下,发起socket主动shutdown的会进入TIME_WAIT状态,如果能先记录一下迅雷刚启动时与所有外部ip的连接(记录下ip和状态吧),间隔<4分钟检查比对一次看看有不有新出现的和其他ip的连接出现TIME_WAIT的。

以前我也写过网络程序用c,如果迅雷主动调用shutdown、或closesocket,应该可以判断迅雷这次和这个“资源服务器”下载对话已经结束了。



  freedom!
2010-4-26 19:37
查看资料  发短消息 网志   编辑帖子  回复  引用回复
gool123456
初级用户




积分 89
发帖 76
注册 2009-12-13
状态 离线
『第 15 楼』:  



  Quote:
Originally posted by rs369007 at 2010-4-26 18:59:


我就是楼主这个思路,监控文件大小。不过觉得这个任有一些难度和问题。
1,用for 扩展读取文件大小 %%~zi ,如果文件没有下完大小还是整个文件 ...

嗯 ,是很好的建议。
今天测试过了,确实发现了迅雷有时不在正常连接状态下,依然可以下载. 不知道是不是UDP连接在作怪,还是流量有延缓。。(前提是我限制了下载速度为2K)。我对这方面不是很了解.

[ Last edited by gool123456 on 2010-4-26 at 20:54 ]



Discuz! 现在时间
2010-4-26 20:30
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: