重金求教几个关于网络的问题,网络高手请进!(谢绝灌水)(300分)

  • 主题发起人 主题发起人 xywen
  • 开始时间 开始时间
X

xywen

Unregistered / Unconfirmed
GUEST, unregistred user!
1.需要借助互联网传输信息和文件时,“阻塞”方式和“非阻塞”方式哪一种更可行、更可靠?为什么?

2.需要借助互联网传输文件时(文件大小可能会达到数百兆以上),ClientSocket-ServerScoket控件、Indy系列控件或是其他什么网络控件更合适、更可靠而且支持“代理服务器”和“断点续传”?

3.当通过互联网使用“流”格式传输文件时,怎样实现“断点续传”?基本原理是什么?

4.当通过互联网传输文件时,接收端怎样实现传输文件的边接收边保存?基本原理是什么?
 
3.当通过互联网使用“流”格式传输文件时,怎样实现“断点续传”?基本原理是什么?
“断点续传”就是利用流传递时可以从流的不同位置起开始传递。比如你第一次接收了
327K的数据。第二次请求传递时就可以把327K做为参数送出。让流的起始位置是327K。把前后二次
的流连接就得到完整数据。
2.需要借助互联网传输文件时(文件大小可能会达到数百兆以上),ClientSocket-ServerScoket控件、Indy系列控件或是其他什么网络控件更合适、更可靠而且支持“代理服务器”和“断点续传”?
如果文件较大用API函数写最合适。
 
期待更多的答案
 
我以前实现了多线程的断点续传的功能,断点续传其实很简单,只要把数据或文件的
rangebegin和rangeend设定即可实现,象网络蚂蚁和网际快车只不过是在程序下载文件
时动态的指定起止位置,你进行下载文件试你的程序先是项服务起发出一请求,等服务
器做回迎,它会返回一数据其格式请参考rfc的文档好像是100*,记不清了,好像是2**即
为数据存在,然后你可以取出它的文件大小,等一系列的数值信息,保存文件的话你可以
把数据写到一零时的文件中,等到数据下载完毕后进行合并,文件的合并会吧,具体可以
参考delphi的例程。
 
http://61.132.118.185:8080/dispdocnew.php?t=&id=2399
SuperDown
版本: 1.0 Beta 上传者: 上传时间: 2002 十二月 11 16:25 访问数: 2207 下载数: 818
开发语言: Delphi
大小: 5,361,628 字节
您必须登陆后才可以下载! 简介: 1:综合FTP下载和HTTP(网络蚂蚁)(多线程).
2:FTP下载支持多个站点同时下载一个文件(同时支持断点续传).
3:可以在不下载ZIP.RAR.ISO文件的情况下查看文件里面的目录文件.
4:支持多语言.
5:操作综合其它软件.
6:自定义快捷键.
7:在IE工具栏上加按钮,可以直接拖动连接到按钮上下载.
9:采用Messenger的弹出滑动消息提示框.
10:下载管理,虚拟文件夹.
11:自动ping.
12:连接到搜索引擎.
13:自动报告bug,建议等.
14:宏功能.
15:自动同步文件夹.
16:保存加载任务.
17:计划任务.
18:单线程下载时不能创建临时文件.
19:下载流文件(rm,Media Player).
 
1.阻塞稳定,非阻塞快速
2.文件大大小与组件没有关系,从支持代理的角度使用indy组件
3.4.的的答案都分两种:
分割文件发送:发送(记录文件名,分割文件的序号),收到后保存一个分割文件,如果出现异常,下次从这个分割文件序号开始传。
分割流发送:(记录流在文件中的起始位置和结束位置)。接收方建一个文件流不断收,从文件的末尾开始写。如果出现异常,下次从这个流的起始位置开始发送就是断点续传了。
 
第二个问题,个人觉得用indy好点

断点续传需要做个缓存。
 
可否用一个举一个TFileStream的ReadBuffer和WriteBuffer的例子。
 
简单回答一下吧:
1.用“阻塞”方式吧。
2.强烈推INDY组件
3.采用流方式。用这个TMemoryStream。。。当接收时要记住当前接收到的位置,下次再收时,则从该位置开始
4.建立一个暂存文件,一边收,则一边把收到的数据追加到该文件。文件的追加写入操作看看API吧。呵呵,不难的
 
用“阻塞”方式安全一些
 
var buf:array [1..8192] of char;
fs1,fs2:Tfilestream;
begin
fs1:=Tfilestream.create(filename1,fmopenream);
fs1.postion:=0;
fs1.writebuf(buf,8192);从文件filename1中读8192长度
fs2:=Tfilestream.create(filename2,fmcreate);
fs2.readbuf(buf,8192);//写到文件feilname2中8192程度
 
对方有没有开服务,用HTTP协议或FTP协议吧,都支持断点虚传的,
不用劳神自己设计协议格式
 
多人接受答案了。
 
后退
顶部