📄 vc中ftp协议实现4.htm
字号:
width=8></TD>
<TD width=744 height=7></TD>
<TD width=8 height=7><IMG height=7
src="VC中ftp协议实现多线程断点续传-太平洋电脑网Pconline-[VC-MFC]4.files/right_k.gif"
width=8></TD></TR></TBODY></TABLE>
<CENTER>
<TABLE height=7 cellSpacing=0 cellPadding=0 width=760 align=center
bgColor=#ffffff border=0>
<TBODY>
<TR>
<TD width=8
background=VC中ftp协议实现多线程断点续传-太平洋电脑网Pconline-[VC-MFC]4.files/k_bg_left.gif
bgColor=#ffa200><IMG height=8
src="VC中ftp协议实现多线程断点续传-太平洋电脑网Pconline-[VC-MFC]4.files/k_bg_left.gif"
width=8></TD>
<TD align=middle width=744 height=100>
<SCRIPT
src="E:\Learn\Other\VC中ftp协议实现多线程断点续传-太平洋电脑网Pconline-[VC-MFC]4.files\show(1).1]"></SCRIPT>
</TD>
<TD width=8
background=VC中ftp协议实现多线程断点续传-太平洋电脑网Pconline-[VC-MFC]4.files/k_bg_right.gif
bgColor=#ffa200><IMG height=8
src="VC中ftp协议实现多线程断点续传-太平洋电脑网Pconline-[VC-MFC]4.files/k_bg_right.gif"
width=8></TD></TR></TBODY></TABLE>
<TABLE height=7 cellSpacing=0 cellPadding=0 width=760 align=center
bgColor=#ffffff border=0>
<TBODY>
<TR>
<TD width=8
background=VC中ftp协议实现多线程断点续传-太平洋电脑网Pconline-[VC-MFC]4.files/k_bg_left.gif
bgColor=#ffa200><IMG height=8
src="VC中ftp协议实现多线程断点续传-太平洋电脑网Pconline-[VC-MFC]4.files/k_bg_left.gif"
width=8></TD>
<TD style="BORDER-TOP: #000000 1px solid" width=743><SPAN
id=menu>-</SPAN></TD>
<TD width=8
background=VC中ftp协议实现多线程断点续传-太平洋电脑网Pconline-[VC-MFC]4.files/k_bg_right.gif
bgColor=#ffa200><IMG height=8
src="VC中ftp协议实现多线程断点续传-太平洋电脑网Pconline-[VC-MFC]4.files/k_bg_right.gif"
width=8></TD></TR></TBODY></TABLE>
<TABLE height=7 cellSpacing=0 cellPadding=0 width=760 align=center
bgColor=#ffffff border=0>
<TBODY>
<TR>
<TD width=8
background=VC中ftp协议实现多线程断点续传-太平洋电脑网Pconline-[VC-MFC]4.files/k_bg_left.gif
bgColor=#ffa200><IMG height=8
src="VC中ftp协议实现多线程断点续传-太平洋电脑网Pconline-[VC-MFC]4.files/k_bg_left.gif"
width=8></TD>
<TD align=middle width=744 height=100>
<TABLE cellSpacing=0 cellPadding=0 width=744 bgColor=#ffffff border=0>
<TBODY>
<TR>
<TD
style="BACKGROUND-POSITION: right top; BACKGROUND-ATTACHMENT: fixed"
vAlign=top align=middle width=577>
<TABLE cellSpacing=0 cellPadding=5 width="100%" border=0>
<TBODY>
<TR vAlign=top>
<TD class=article>
<TABLE height=22 cellSpacing=0 cellPadding=2 width=554
border=0>
<TBODY>
<TR>
<TD vAlign=top align=right width=89>您现在的位置:</TD>
<TD vAlign=top width=333><A
href="http://www.pconline.com.cn/pcedu/index.html">软件资讯</A> > <A
href="http://www.pconline.com.cn/pcedu/empolder/index.html">开发特区</A> > <A
href="http://www.pconline.com.cn/pcedu/empolder/gj/index.html">开发语言</A> > <A
href="http://www.pconline.com.cn/pcedu/empolder/gj/vc/index.html">VC/MFC</A></TD>
<TD width=130><A
href="http://survey.pconline.com.cn/freecode/ent_code.jsp"><IMG
height=15 alt=免费新闻代码 hspace=2
src="VC中ftp协议实现多线程断点续传-太平洋电脑网Pconline-[VC-MFC]4.files/freecode.jpg"
width=80 border=0></A><A
href="http://www.pconline.com.cn/autopublish/rss/000000005.xml"><IMG
height=14 alt=RSS新闻聚合 hspace=2
src="VC中ftp协议实现多线程断点续传-太平洋电脑网Pconline-[VC-MFC]4.files/rss.gif"
width=36 border=0></A></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=6 width="99%"
background=VC中ftp协议实现多线程断点续传-太平洋电脑网Pconline-[VC-MFC]4.files/point.gif
border=0>
<TBODY>
<TR>
<TD align=middle colSpan=3>
<TABLE cellSpacing=0 cellPadding=0 width="100%"
border=0>
<TBODY>
<TR>
<TD width="15%"> </TD>
<TD align=middle width="68%"><FONT color=#339900
size=3><B>VC中ftp协议实现多线程断点续传</B></FONT></TD>
<TD vAlign=bottom align=right
width="17%">出处:VCkbase</TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD width=145>[ 2005-09-19 10:15:56 ] </TD>
<TD align=middle>作者:吴康彬 </TD>
<TD align=right>责任编辑:moningfeng</TD></TR></TBODY></TABLE>
<DIV align=center>
<SCRIPT
src="E:\Learn\Other\VC中ftp协议实现多线程断点续传-太平洋电脑网Pconline-[VC-MFC]4.files\show(1).3]"></SCRIPT>
<TABLE
style="BORDER-RIGHT: #cccccc 1px solid; BORDER-TOP: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; BORDER-BOTTOM: #cccccc 1px solid"
cellSpacing=0 width=414 bgColor=#f7f8f9 border=0>
<TBODY>
<TR>
<TD>
<DIV id=demo
style="OVERFLOW: hidden; WIDTH: 380px; HEIGHT: 20px">
<DIV id=demo1>
<TABLE cellSpacing=0 cellPadding=0 width=380 border=0>
<TBODY>
<TR>
<TD height=18>·<A
href="http://www.pconline.com.cn/pcedu/pingce/0507/655303.html"
target=_blank><FONT
color=#0000ff>影音享乐方式!Divx6完全评测</FONT></A></TD>
<TD height=18>·<A
href="http://www.pconline.com.cn/pcedu/pingce/0507/659415.html"
target=_blank><FONT color=#0000ff>浏览下载一条龙,Opera BT
体验</FONT></A></TD></TR>
<TR>
<TD height=18>·<A
href="http://www.pconline.com.cn/pcedu/softnews/weedcomment/0507/660979.html"
target=_blank><FONT
color=#0000ff>软件观察:别让流氓软件耍无赖!</FONT></A></TD>
<TD height=18>·<A
href="http://www.pconline.com.cn/pcedu/softnews/cs/0507/660903.html"
target=_blank><FONT color=#0000ff>关注!Longhorn
5203多图泄漏</FONT></A></TD></TR>
<TR>
<TD height=18>·<A
href="http://www.pconline.com.cn/pcedu/soft/wl/assist/0507/661263.html"
target=_blank><FONT
color=#0000ff>你会是那个超酷的"播客"吗?</FONT></A></TD>
<TD height=18>·<A
href="http://www.pconline.com.cn/pcedu/soft/gj/sys/0507/658762.html"
target=_blank><FONT
color=#0000ff>我与超级兔子的恋爱史</FONT></A></TD></TR>
<TR>
<TD height=18>·<A
href="http://www.pconline.com.cn/pcedu/tuijian/media/video/0506/651499.html"
target=_blank><FONT color=#0000ff>Divx
Converter精彩试用</FONT></A></TD>
<TD height=18>·<A
href="http://www.pconline.com.cn/pcedu/tuijian/photo/design/0507/657089.html"
target=_blank><FONT
color=#0000ff>图像格式转换的好帮手</FONT></A></TD></TR>
<TR>
<TD height=18>·<A
href="http://www.pconline.com.cn/pcedu/empolder/gj/c/0508/694099.html"
target=_blank>编程盗2005版QQ</A>源码</TD>
<TD height=18>·<A
href="http://www.pconline.com.cn/pcedu/empolder/gj/java/0509/695483.html"
target=_blank>论全世界所有程序员都会犯的错误</A></TD></TR>
<TR>
<TD height=18>·<A
href="http://www.pconline.com.cn/pcedu/sj/pm/photoshop/0507/661469.html"
target=_blank><FONT
color=#0000ff>PS立体光影魔术:在玻璃上打个洞</FONT></A></TD>
<TD height=18>·<A
href="http://www.pconline.com.cn/pcedu/sj/pm/photoshop/0507/660964.html"
target=_blank><FONT
color=#0000ff>Photoshop立体魔术2:光影的奥秘</FONT></A></TD></TR></TBODY></TABLE></DIV>
<DIV id=demo2></DIV></DIV>
<SCRIPT>
var speed=100
demo2.innerHTML=demo1.innerHTML
function Marquee(){
if(demo2.offsetTop-demo.scrollTop<=0)
demo.scrollTop-=demo1.offsetHeight
else{
demo.scrollTop++
}
}
var MyMar=setInterval(Marquee,speed)
demo.onmouseover=function() {clearInterval(MyMar)}
demo.onmouseout=function() {MyMar=setInterval(Marquee,speed)}</SCRIPT>
</TD></TR></TBODY></TABLE></DIV><BR> FTP多线程下载技术部分:前面我介绍了文件的保存技巧,主要也是为了多线程服务。现在有个namelock.avi文件需要下载。文件的大小为:364544字节。要用8个下载线程。
第一步:将namelock.avi文件分成8个子模块。这里要注意的地方是我所说的分成8个字模块,并不是把文件的内容分别存放到8个不同的缓冲区里。而是生成8个不同的文件偏移量。很多时候程序员为了偷懒往往容易一次性讲文件读入内存,这样带来的后果是不堪设想的。一个比较理想的方法是这样的。<BR>
<P class=code>bool DealFile(string fileName)
//随便写个函数说明<BR>{<BR>FILE *file;<BR>DWORD fileSize ,pos;<BR>int
readLen ;<BR><BR>//MAX_BUFFER_LEN
在头文件里定义,这里能够保证数据不丢失,也不至于内存逸出<BR>char *buffer = new
char[MAX_BUFFER_LEN]; <BR>file =
fopen(fileName.c_str(),"r+b");<BR> if(file == NULL) return
false;<BR>fseek(file,0,2);<BR>fileSize = ftell(file);
//取得文件的大小<BR>fseek(file,0,0);<BR>do{<BR>readLen =
fread(buffer,sizeof(char),MAX_BUFFER_LEN,file);<BR>if(readLen
> 0)<BR>{<BR>pos +=
readLen;<BR>//对读取的文件做处理<BR>}<BR>}while(pos < fileSize);
//循环读取文件<BR> delete[] buffer;<BR>fclose(file);
//释放资源<BR>return true;<BR><BR>}</P>
<P><BR> 8个线程下载文件时,都要对内容文件和配置文件进行读写。这样如果没有处理好,很有可能会造成访问文件失败,我定义了一个全局变量FileLocked,如果FileLocked=true说明文件正在被某个线程访问。所以使用Sleep(10)睡眠等待。当某个线程进入读写文件时必须设置FileLocked
= true;访问文件完毕必须将FileLocked =
false;这样就能很好的控制各个线程对文件的访问了。(对临界资源的访问有API提供了很多很好的解决方法,请查阅)。<BR><BR> 8个下载线程同时下载文件时,完成部分下载是随机的。那么怎么样把随机的文件数据按照偏移量正确的写入文件呢?我是这样实现的,当要下载文件namelock.avi时,首先查找文件namelock.avi.san配置文件是否存在。如果存在,说明上次已经下载过部分该文件,就可以断点续传了。如果没有找到该文件,那么生成和该文件的大小一样大的文件,文件里所有的数据都为0,(可以使用函数memset(buffer,10000,''0''))和一个配置文件。然后利用fseek函数将数据正确的覆盖原先的0;接下来要介绍一写配置文件的格式了。</P>
<P> 很简单,配置文件的内容主要包括:文件在本地保存的绝对路径、文件的大小、线程的个数、已经下载的文件大小,各个线程的任务(在原始文件起始位置和结束位置,中间使用''-''分开);如:<BR></P>
<P class=code>D:\mm\namelock.avi //文件保存在这里 <BR>364544
//文件大小<BR>5 //有5个线程在下载<BR>0 //已经下载了0字节<BR>0-72908
//线程1的下载任务<BR>72908-145816 //线程2的下载任务<BR>145816-218724
//线程3的下载任务<BR>218724-291632 //线程4的下载任务<BR>291632-364544
//线程5的下载任务</P>
<P><BR> 以上是开始下载时的各个线程的任务分配。</P>
<P><BR clear=all>
<DIV class=article align=center><A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -