转自:http://msplinks.com.cn/MDFodHRwOi8vZmFsY2hpb24uamF2YWV5ZS5jb20vYmxvZy8xNzAzNDY=
ftp断点续传的原理
客户端的实现步骤如下:
一、下载:
1、向服务器发送“REST + 本地文件长度”命令,告诉服务器,客户端要断点下载了。这时服务器还不知道客户端要下载哪个文件;
2、向服务器发送“RETR + 文件名”命令,通知服务器要下载的文件名,这时服务器开始定位文件指针读文件并发送数据。
3、客户端定位本地文件指针(文件末尾);
4、两端的准备工作都做完了以后,客户端创建socket,以被动或非被动方式建立数据通道,循环调用recv接收数据并追加入本地文件;
二、上传:
1、获取服务器上和本地要上传文件的同名文件大小;
2、向服务器发送“APPE + 文件名”,通知服务器,接下来从数据通道发送给你的数据要附加到这个文件末尾。
3、定位本地文件指针(和FTP上文件大小相同的位置)
4、从文件指针处读数据并发送。
代码里将断点上传和断点下载放到同一个函数(MoveFile)里,通过get参数说明是上传还是下载。当然,整个FTP类的实现有800多行,包括登录、退出、获取FTP文件大小、删除FTP服务器上文件、响应服务器,解析响应信息等函数。相应的注释代码里都有,这里就不一一熬述了。
HTTP断点续传的原理http://msplinks.com.cn/MDFodHRwOi8vd3d3Lml0LmNvbS5jbi9mL2VkdS8wNTgvMTcvMTU5NzU5Lmh0bQ==请求服务器上的一个文时,所发出的请求如下:
假设服务器域名为wwww.name.org,文件名为name.zip。
GET /name.zip HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-
excel, application/msword, application/vnd.ms-powerpoint, */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)
Connection: Keep-Alive
服务器收到请求后,按要求寻找请求的文件,提取文件的信息,然后返回给浏览器,返回信息如下:
200
Content-Length=106786028
Accept-Ranges=bytes
Date=Mon, 30 Apr 2001 12:56:11 GMT
ETag=W/"02ca57e173c11:95b"
Content-Type=application/octet-stream
Server=Microsoft-IIS/5.0
Last-Modified=Mon, 30 Apr 2001 12:56:11 GMT
所谓断点续传,也就是要从文件已经下载的地方开始继续下载。所以在客户端浏览器传给
Web服务器的时候要多加一条信息--从哪里开始。
下面是用自己编的一个"浏览器"来传递请求信息给Web服务器,要求从2000070字节开始。
GET /gman.zip HTTP/1.0
User-Agent: NetFox
RANGE: bytes=2000070-
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
仔细看一下就会发现多了一行RANGE: bytes=2000070-
这一行的意思就是告诉服务器gman.zip这个文件从2000070字节开始传,前面的字节不用传了。
服务器收到这个请求以后,返回的信息如下:
206
Content-Length=106786028
Content-Range=bytes 2000070-106786027/106786028
Date=Mon, 30 Apr 2001 12:55:20 GMT
ETag=W/"02ca57e173c11:95b"
Content-Type=application/octet-stream
Server=Microsoft-IIS/5.0
Last-Modified=Mon, 30 Apr 2001 12:55:20 GMT
和前面服务器返回的信息比较一下,就会发现增加了一行:
Content-Range=bytes 2000070-106786027/106786028
返回的代码也改为206了,而不再是200了。
http断点续传内核的实现:
主要用了6个类,包括一个测试类。
SiteFileFetch.java负责整个文件的抓取,控制内部线程(FileSplitterFetch类)。
FileSplitterFetch.java负责部分文件的抓取。
FileAccess.java负责文件的存储。
SiteInfoBean.java要抓取的文件的信息,如文件保存的目录,名字,抓取文件的URL等。
Utility.java工具类,放一些简单的方法。
TestMethod.java测试类。
分享到:
相关推荐
在探讨具体的实现之前,我们先来理解下断点续传的基本原理。断点续传功能已经成为现代网络应用中的一项重要特性,尤其是在文件传输领域。其核心目标是在遇到网络中断或用户主动暂停下载时,能够继续之前的下载进度而...
总的来说,FTP及断点续传原理是网络开发和运维中的基础技能,了解和掌握这些知识对于进行文件传输相关的系统设计和故障排查至关重要。通过学习提供的资源,你可以深入理解FTP的工作机制,以及如何实现断点续传功能,...
### FTP断点续传编程原理详解 #### 一、引言 FTP(File Transfer Protocol)是一种用于在网络上进行文件传输的标准协议。随着网络技术的发展,FTP的功能也在不断拓展和完善。其中,“断点续传”功能是用户非常关心...
Java 断点续传技术是网络传输中常用的一种机制,特别是在大文件下载或上传时,如果因为网络中断或其他原因导致传输失败,可以借助断点续传功能从上次中断的地方继续,而无需重新开始。在Java中实现断点续传,通常...
HTTP断点续传原理及Flex实现技术,主要是用httpservice来实现图片或文件的断点续传
断点续传原理是通过记录已下载部分的信息(通常是一个包含下载进度的文件),在下次下载时,`curl`会读取这个信息,然后从上次中断的地方开始继续下载。要实现这一功能,`curl`使用了`-C`或`--continue-at`选项,...
所谓断点续传,也就是要从文件已经下载的地方开始继续下载。所以在客户端浏览器传给 Web服务器的时候要多加一条信息--从哪里开始。
Java中的HTTP断点续传原理是网络编程中的一个重要概念,特别是在大文件下载时非常有用。它允许用户在中断下载后,从上次停止的地方继续下载,而无需重新开始整个过程。这个机制在Java中可以通过使用`...
开发者可以通过研究这些代码来深入理解断点续传的工作原理,并在自己的项目中应用这些技术。无论是服务端还是客户端的断点续传,都需要对HTTP协议有深入的理解,尤其是HTTP头的使用,以及对文件操作和网络编程的熟悉...
文件上传断点续传协议是一种高效且可靠的文件上传机制,尤其适用于处理大文件和网络不稳定的情况。该协议的实现基于Python和JavaScript,采用一发一回的通信方式,确保了客户端与服务器之间的交互效率和准确性。它...
在本文中,我们将深入探讨下载和断点续传的基本原理,以及如何在实际应用中实现这一功能。 一、下载技术基础 1. **HTTP协议**:大多数文件下载都是通过HTTP或HTTPS协议进行的。HTTP是超文本传输协议,负责在网络上...
**FastDFS断点续传实例详解** FastDFS是一款开源的高性能、轻量级的分布式文件系统,主要用于解决海量数据存储和负载均衡的问题。在实际应用中,文件上传和下载是常见的操作,尤其是大文件,断点续传功能就显得尤为...
下面将详细介绍断点续传的基本原理以及可能涉及的关键技术。 1. 断点续传原理: 断点续传主要通过保存和恢复文件传输状态来实现。当文件传输开始时,客户端记录当前已下载或上传的数据量(即“断点”),一旦传输...
1. 断点续传原理: 断点续传基于文件分块和保存下载进度的概念。当下载开始时,服务器会提供文件的总大小,客户端则记录已下载的数据量。如果下载中断,客户端会记住当前的下载位置,并在下次启动时从这个位置继续...
以下将详细讲解多线程断点续传的概念、实现原理以及在Android中的应用。 **多线程下载** 多线程下载是指在下载大文件时,将其分割成多个小部分,然后用多个线程同时下载这些部分。这种方法可以充分利用网络带宽,...
1. **断点续传原理**: 断点续传基于TCP/IP协议,当文件传输过程中由于网络问题、电源故障或其他原因导致连接中断时,客户端和服务器端会保存当前传输的状态信息,包括已传输的数据量和文件的当前位置。当重新建立...