可怜大学4年,虽说我们专业是在软件学院里面,知识大都学过,可四年了了都没真正掌握好编程的什么东西。刚刚开始和老师做项目,老师要我实现将较大的数据从服务器传输到客户端,
并支持断点续传。是的,就是那么一句话,也没什么更多的提示了,我自己研究了几天却都不知道从哪里下手。
不知道你们能不能体会这种茫然又无助的心情,这个时候我想到了这里,毕竟以前在这里的问答中找到过很多需要的东西,所以自己来这里发个贴得到一点提示。
当然,有不懂的可以去问老师,可我连问什么问题都不知道。。。
功能是:
实现大数据的断点续传
客户端能够接收服务器发来的文件,并能够实现断点续传。
那么我还有什么要问老师的,下面这些吗:
是写代码实现这一功能加入到原有的程序中,那么用什么语言来实现。
数据的传输方式:Socket\http
不管大家是对于完成这么一个功能有什么好的建议、推荐的资料或者是有什么是还需要去向老师了解的,都欢迎大家提出来,
最后矫情一点,感谢所有不认识的你们对我的每一点帮助。
有没有要求有 HTTP,还是 FTP,还是其它呢?如果没有,下载一个开源的 FTP 工程,Google 一下还是很多的。
要学会找资料和资源哦,呵呵...
你的心情可以理解,每个人刚开始都有你的那种茫然无助的感觉,跨过去就好了。
既然是老师提的要求(也就是所谓的“项目需求”或者“功能需求”了),那就一定要他说明白,到底要想干嘛?(看你的意思,你老师的需求太模糊了,软件高手也没法实现他的模糊需求啊)
比如,使用什么传输协议实现?HTTP,FTP,UDP还是TCP(也即需要使用socket自己实现各种控制了)
服务器与客户端的主被动模式是什么?(push或pull) 服务器推送文件到客户端,还是客户端到服务器请求文件?
对性能(吞吐量,并发量,延迟时间等)有什么要求?
还有很多啦,你得问到这个需求没有二义性,很明确为止,然后上网搜索解决。
建议可以参考FTP的断点续传实现(有很多开源软件可以参考,比如 filezilla等)
自己规定一种非常简单的协议(你可以看作ftp的雏形,但是要比ftp简单多)。
客户端发送两种命令,一种是请求文件信息,服务器返回文件长度。
一种是请求文件中的某一块,给出起始字节和长度,服务器返回这个文件块。
做法,客户端首先请求文件,得到长度,在本地创建一个这样长度的空白文件,再创建一个配置文件,将文件划分成很多块,此时每个块都标记为0。
然后客户端请求每个块,服务器返回文件块,客户端写入这个文件的指定位置,并且在配置文件中将对应的块标记为1。当配置文件全部都是1的时候。表示文件下载成功。
至于如何随机读写文件这个你应该会的。
你还可以增加一些命令,比如列举服务器上的文件名和目录、上传文件、等等。
我觉得要实现断点续传,你必须理解为什么我们说TCP是可靠的传输协议。
简单说,传过来的数据进行CRC验证通过,好那么先放到缓存区,待会接收完毕
通过序号拼接数据。
那是针对每一小段数据而言的,现在至于你说的大数据,方法还是类似的。
只不过每次传过来够一大段才进行数据完整验证,至于多大的数据,使用
什么验证方式,使用什么协议(我觉得这正式你们老师想考你们的)
至于楼上说的ftp协议,我觉得你水平应该看不懂(当然,你能看得懂更好)
如果使用库或者第三方服务器代劳,那么也就没有体现你需要做的核心技术啦!
比如:你用rabbitmq/activemq/zeromq/队列服务传送,那么它可以完全保证
你的传送要求,但是,你根本不可能学会为什么它能够这样。
socket通信,tcp,都有些例子
可以使用tcp文件传输协议,这个涉及到使用socket两端通信,需要通道vs吧,我这边有现成的做好的工程文件,有实现数据传输的,也有实现文件传输的!希望对你有帮助!
使用Socket套接字传输数据,可以查阅一下相关资料,Socket通信技术在现在已经十分成熟了,各个环境下,各个语言中都有很好的封装,相信你一番
查阅可以找到很好的例子,(比如MSDN上就有很好的数据传输例子)。
首先做到数据传输,不要去考虑断点续传问题,问题总是由简单到复杂的。
实现了数据传输后,再使用一楼大神的方法,就可以再查阅下断点续传的方法,祝你成功!
断点续传的文件进度信息可以用一个文件保存,下次断点上传时可以从此文件再获取信息去传输文件。