实现FTP多线程下载

多线程FTP(1)——多线程网络通信简单实现 多线程FTP(1)——多线程网络通信简单实现 之前写了一个FTP项目,但实际上我们写的FTP项目只满足单线程——这就像是打电话一样,当一个客户端和服务端连接,其他客户端就会因为服务端占线而无法连接,必须等之前连接的客户端“挂断”才能连接通信。 就像演示的一样, 当一个客户端完成连接(比如说登录,和查看当前目录时) 另一个客户端无法完成和服务端的通信,比如说登录; 而只有在前一个客户端断开连接,服务端才会去处理后一个客户端的信息(即完成登录) 很显然,一次只满足一个用户登录并不满足我们需求,我们想要的肯 阅读详情

作者:来自网络,作者不详

摘要:介绍实现ftp多线程下载的方法

   现在有不少软件可实现多线程下载.如NetAnts,JetCar等,其实多线程下载的原理并不复杂,主要的两项技术就是多线程和断点下载。程序中开启多个线程,每个线程利用断点下载,分别下载文件的不同部分,下载完后合并,就可以了。多线程编程很多书已有介绍,这里不再重复,关于断点下载,MFC中提供的CInternetFile类可实现HTTP的断点下载,但无法实现FTP的断点下载。因此,我们只好从FTP协议中的命令入手,自己编写个FTP类,来实现多线程下载。本人编写的CMultiFTP类(在WIN2000+IIS5。0下测试成功)已在优快云发表。

FTP指令的详细信息,大家可从http://info.internet.isi.edu/in-notes/rfc/处获得,这里给大家介绍下与多线程下载有关的几个指令极其格式:

USER〈USERNAME〉:登陆FTP的用户名,执行成功返回220;

PASS〈PASSWORD〉:密码,执行成功返回230;

REST〈POS〉:指定文件下载的开始位置,执行成功返回350;

SIZE〈FILENAME〉:文件大小,执行成功返回213;

PASV:建立数据连接,同时取得FTP服务器下载文件时用的端口号,执行成功返回227;

TYPE:指定下载文件的类型,参数为I是二进制文件,为A是字符文件,执行成功返回200;

RETR〈FILENAME〉:下载文件,执行成功返回125;

这些命令中,REST,RETR,SIZE三个命令最关键,在后面会给大家更详细的说明,另外执行FTP命令,FTP服务器会向客户端返回一代码,命令执行成功的代码上面已给出。向服务器发送命令,可把命令当作字符串向服务器发送,如:send(socket,”rest 100/r/n”,…)(注意:要在命令后加/r/n)。

在介绍多线程下载前,先给大家介绍下连接FTP服务器和从FTP服务器下载文件的过程。连接FTP SERVER很简单,创建一套接字,指定服务器的地址和端口号,连接到服务器,再向它发送USER和PASS命令,服务器返回230,就代表登陆成功,并且服务器和客户建立了一控制连接。

FTP服务器下载文件的过程比较复杂。首先,客户端要和服务器建立一数据连接,可用PORT或PASV命令建立数据连接,PORT命令要自己指定一端口号用于下载,PASV命令则由服务器分配一端口号,客户端可从服务器的返回信息提取端口号,返回信息的格式为:

(服务器IP,端口号),本人的程序将使用PASV命令。然后向服务器发送RETR命令下载文件,或先发送一REST命令指明从哪下载文件。之后,要建立一新的套接字,连接到数据连接指定的端口,文件数据就从这个套接字下载。下载完毕后,关闭套接字。

现在进入本篇的精华,实现多线程下载。执行完登陆操作后,先发送“REST 100”命令,测试下服务器是否支持断点下载,如返回成功代码,就可实现多线程下载;然后发送“SIZE”,取得文件的大小,根据文件大小,将文件分为几部分,记下各部分的偏移地址,并作为参数,交给各线程去下载。在下载线程中,先接受主线程传给他的参数(文件名,偏移地址,保存地址等),再发送“PASV”命令,建立数据连接,并新建一套接字连接到新的端口;然后根据文件类型,二进制文件发送“TYPE  I“命令,文本文件发送”TYPE  A“命令;之后发送“REST  〈文件偏移地址〉”命令,通知服务器改变将要下载的文件的开始地址;最后,执行“RETR 〈文件名〉”命令,下载文件。下载完毕后,编段代码合并文件即可。

在这里有个问题,就是主线程如何得知各下载线程已执行完毕。WINDOWS提供了几种线程互斥技术,如CriticalSection,Mutex等,关于他们的详细信息,大家可参考各种编程书籍,在这里我推荐使用CriticalSection技术。可以在程序中建立一全局计数器,在文件下载前置零,并建立一全局CriticalSection变量。在下载线程中,当文件下载完毕后,先锁定全局CriticalSection变量,之后将计数器加一,再释放全局CriticalSection变量。主线程中,可建立一定时,定期检查计数器的值,或让下载线程在下载完毕后调用主线程的某个函数。这样,主线程就可随时发现文件已下载完毕,可合并文件了。

多线程下载的程序设计就是这样,一点都不难。看来掌握某些计算机技术,特别是网络技术,最好还是从实现原理入手,掌握其最精华的部分,激发自己的灵感,编写出个优秀软件。老停留在使用别人的组件和函数库的基础上,你的水平不会有太大提高。

用delphi实现ftp多线程下载源代码(转载) //接收文件 function TForm1.GetURLFileName(aURL: string): string; var i: integer; s: string; begin //返回下载地址的文件名 s := aURL; i := Pos(/, s); while i begin Delete(s, 1, i); i := Pos(/, s); end; Result := 阅读详情

相关推荐

FTP多线程文件切割传输技术实现

本文还有配套的精品资源,点击获取 简介:FTP多线程文件切割传输是一种提高大文件传输效率的方法,通过将文件分割成多个小部分,并使用多个线程并发传输,减少了传输时间并优化了带宽使用。本技术实现将详细介绍如何通过Delphi环境中的库函数或第三方组件来处理文件切割和多线程传输,以及如何确保传输过程中的稳定性和数据一致性。 1. FTP基本原理 1.1 FTP 协...

weixin_35871529的博客 1594

多线程实现ftp 文件下载

1 需求: 某个接口的纪录在ftp 服务器上,以类别/日期/时间.来存放文件,而一天可能会产生几百个文件,需要下载文件进行保存 问题: 1. 这个时候如果同时,要拿几个类别,某个时间段的数据,就要疯狂下载了,如果是单线程的 2. ftp 一般只允许同一个用户名,同时有几个进程连接 3. ftp 多个读取文件循环读取的时候,经常会出现,第一个文件得到字节流,而后面的文件的字节流都是null...

kzcming的博客 1万+

HTTP与FTP多线程下载实现技术详解

HTTP(HyperText Transfer Protocol)是用于从万维网(WWW)服务器传输超文本到本地浏览器的传输协议,属于应用层协议。其采用请求-响应模型,客户端(如浏览器)向服务器发送请求,服务器响应并返回数据。HTTP协议基于TCP/IP协议栈,通常使用端口80(HTTP)或443(HTTPS)进行通信。本章详细讲解了多线程下载完成后数据合并与顺序保持的核心方法。

weixin_42587866的博客 844

VC中ftp协议实现多线程断点续传

     http://tech.163.com/school · 2005-09-19 16:34:25 · 来源: PConline      ftp下载的好处我在这里就不多说了,许多工程会把ftp下载作为一个重要的功能来实现。微软提供的WinInet类可以利用下面这些函数:   InternetOpen;   InternetConnect;   GetCurrentDirectory;  

luckisok的专栏 1874

多线程FTP下载程序

多线程FTP下载程序,代码简结,使用。网络初学者的福音

多线程FTP客户端

FileZilla是一个快速,实用多功能和界面直观的FTP客户端。FileZilla 是一个免费的 FTP 客户端软件,虽然它是免费软件,可功能却一点也不含糊,比起那些共享软件来有过之而无不及,在新的版本中作者改进了手动下载的界面和功能等,不过该软件暂时还是不支持断点续传功能。 总的来说是一款优秀的免费软件。

一个解决FTP下载慢的方法

此文转至百度知道. 因为好多FTP站点都是默认单线程下载,所以很慢,加上很多FTP软件都是单线程下载,就更慢了。可以用多线程的下载软件来加速下载,请参考我在这里的回答:FlashfXP只能单线程下载,可以先用FlashfXP登录FTP站点,选中你要下载的文件,右击鼠标,在出现的菜单上选择:“复制URL(Ctrl+U)”,FlashfXP会提示:“是否复制用户名及密码?”,选择...

weixin_34186931的博客 1万+

java的ftp多线程下载

本程序是在原有基础上逐步完善的,第一版:http://download.youkuaiyun.com/detail/zpwmhx/4342943 第二版:http://download.youkuaiyun.com/detail/zpwmhx/4505209 详细文档请看: http://www.open-open.com/home/space.php?uid=183&do=blog&id=8799 本程序很适合在主机间批量传输文件和目录,参数可控

python多线程下载ftp文件_python实现从FTP下载文件通过多线程同时分发到多台机器...

python非常厉害的一门编程语言,被称之为编程语言中的万能粘合剂,它可以和现有的大部分编程语言来完美对接,今天来为大家说说使用python写一个从ftp上下载文件,然后通过python的多线程模块threading同时分发到多台机器,甚至上百台机器上,多了不说了,直接上代码,代码里会详细讲解每一步的操作。可根据你的实际情况来修改脚本,实现多线程远程无缝隙操作服务器。#!/usr/bin/pyth...

weixin_39965514的博客 605

Http/FTP多线程断点续传下载组件

点量Http、FTP多线程断点续传下载组件(下载DLL)的开发目的是让用户可以无需关心Http/FTP协议的具体细节,只需要几十行甚至几行代码,便可以实现一个功能完善的Http/FTP下载软件。点量Http/FTP下载组件(DLL)支持多线程、断点续传、显示详细下载过程、自动查找镜像网址、支持代理传输等完善的功能。 点量Http、FTP下载内核源码使用高效的c++代码编写,提供标准的动态链接库(DLL),可供C/C++、Delphi、C#、Java、VB等语言和各常用开发环境调用,让您完全像调用系统API一样的调用。 点量Http/FTP组件的功能简介: 标准Http和FTP下载支持:完全标准的Http和FTP协议支持,内部通过网址自动区分是Http还是FTP下载。 极速下载(2.0以后版本):超越国内绝大多数下载软件的下载速度。新版内核在2M ADSL的环境下下载,有些文件的速度可以达到1400K字节/秒以上,超过了带宽的极限。下载速度可以用极速形容。 多线程传输:可以将文件自动分块,并采用多线程下载。并可自由设置线程数目。 断点续传:点量Http/FTP有优秀的断点续传支持,每次启动自动从上次下载的位置开始,不需要重复下载。 提供详细的下载详情接口(2.0以后版本):可以看到整个下载过程的步骤,比如开启了多少线程、服务器的应答过程、错误信息等。 支持多种高级设置:设置线程数目、磁盘缓存大小、搜索镜像服务器的详细参数设置、下载文件完成后同步文件为服务器上的文件时间、下载过程中可以自定义文件临时后缀、未完成的文件设为隐藏属性。 支持磁盘缓存:点量Http/FTP下载DLL支持设置磁盘缓存,减少对磁盘的读写,并提升下载速度。 支持设置Refer:点量Http/FTP下载组件支持设置下载时的Refer,以便可以绕过一些防盗链的网站,直接下载内容。 限速功能:点量Http/FTP下载组件可方便的设置下载限速。 多种磁盘分配方式:点量Http/FTP下载组件支持预分配和边下载边分配两种磁盘方式,满足多种下载需求。 自动搜索镜像加速:点量Http/FTP内置了镜像搜索功能,在下载文件的同时,会自动搜索哪些其它网站还有这个文件,自动从其它网址下载加速。 可提供源码:支付一定的费用,便可以获得全部的点量Http/FTP下载组件的源代码,免除您的所有后顾之忧。 良好的服务:作为点量软件旗下的软件,可享受到点量软件的优秀服务,我们的服务让您如同拥有一个称心的专业员工。 点量Http/FTP 下载组件可以适用于任何Http和FTP下载的领域,让您可以在1天内完成一个完整的Http下载软件的全部功能。比如,您可以用于产品的升级、文件的下载和传输等。

java FTP多线程、批量、断点续传实例

本实例实现了java FTP多线程、批量、断点续传实例,代码注释很明了,非常有助于初学者学习及使用。

ftp 多线程下载的设计与实现

ftp 多线程下载的设计与实现                                                                           国防科技大学微软俱乐部 FTP 协议简介   FILE TRANSFER P

super_kevin的专栏 2139

RabbitMQ的使用(JAVA)

Java快速上手的MQ上线!

.............. 1万+

用java实现ftp的多线程下载

1:字节流结构:每次发送12+1024个字节其中,前七个字节字节表示命令第七到第十二个字节表示后面1024字节中的有效字节的长度例如一帧中前12个字节的内容为"UPFILEN00012"表示要上传文件名,文件名的长度是12。那么程序就在后面的1024个字节中去12个字节,在把它转换为字符串,作为要上传的文件名。2:命令结构Server端:DISCONN:断开连接LSFILES:发送当前目录文件列表

duanxd的专栏 8377

实现飞书机器人推送消息到指定群组或者用户

飞书是一个集成了聊天、协作和办公功能的企业级平台,广泛应用于企业内部沟通和协作。飞书机器人(Feishu Bot)是一种强大的工具,允许开发者通过编程接口与飞书进行互动,从而实现自动化消息推送和任务管理。本文将详细介绍如何通过飞书机器人推送消息给指定的人或者群组,帮助您快速上手。

qq_41898196的博客 5866

告别手动烧录!给STM32H750外挂Flash制作Keil专用下载算法(保姆级避坑指南)

本文详细介绍了为STM32H750外挂Flash开发Keil专用下载算法的全过程,从原理到实战操作,特别针对QSPI Flash的配置和优化提供了保姆级避坑指南。通过定制下载算法,开发者可以告别手动烧录,实现一键下载到外部Flash,大幅提升开发效率。

weixin_42567497的博客 251

实现FTP多线程下载 (vc)

<br /><br />  现在有不少软件可实现多线程下载.如NetAnts,JetCar等,其实多线程下载的原理并不复杂,主要的两项技术就是多线程和断点下载。程序中开启多个线程,每个线程利用断点下载,分别下载文件的不同部分,下载完后合并,就可以了。多线程编程很多书已有介绍,这里不再重复,关于断点下载,MFC中提供的CInternetFile类可实现HTTP的断点下载,但无法实现FTP的断点下载。因此,我们只好从FTP协议中的命令入手,自己编写个FTP类,来实现多线程下载。本人编写的CMultiFTP类(在

hardworkba的专栏 1599

Ubuntu22.04安装ros(一键搞定)

然后发现可以一键安装,话不多说,直接终端输入如下指令。回车之后系统会自动安装ros。

m0_47313541的博客 7413
上一篇: 用Java设计下载软件
下一篇: 浅谈如何学习linux
lphpc
博客等级 码龄22年 32粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值