線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1639
推到 Plurk!
推到 Facebook!

Indy TrivialFTP的问题

答題得分者是:turboted
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-29 15:49:44 IP:218.17.xxx.xxx 未訂閱
大家好! 我在DELPHI7下,用Indy9的TrivialFTP,试着自己做了一个 Server和一个Client.发现运行起来有问题。 问题-1: Client端Get一个文件下来,如果文件很小,没问题。一切正常。如果文件有100多K,则好象死在那里一样。好几十分种也完成不了。 问题-2: Client上传一个文件,也就是向Server端Put一个文件,出现错误提示:Cann't Create file 不能存取文件,该文件已经被另一个进程打开。但是,Server却已经在自己的DISK上建立了接收文件的文件名,只是写不进去数据,因此文件大小为0.
turboted
版主


發表:95
回覆:754
積分:452
註冊:2002-07-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-30 17:46:42 IP:210.241.xxx.xxx 未訂閱
如果方便的話,把程式上傳讓我們看看那裏生病了吧
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-30 18:16:47 IP:218.17.xxx.xxx 未訂閱
引言: 如果方便的話,把程式上傳讓我們看看那裏生病了吧 < face="Verdana, Arial, Helvetica"> 谢谢。我做的是个简单的测试DEMO。不用放程序上来了。我是这样做的: 做一个Server Project,就是拖一个 IdTrivialFtpServer放到FORM上,Run,完成。 New一个 Client Project,拖一个IdTrivialFtp到FORM上。然后放一个BUTTON,写:IdTrivialFtp.Get(myfileName,myStream),这样就可以了。 关于第一个问题,就是 Client 端死掉一样的现象,我看了 Indy 的Source,是里面有个 while true do的loop,一直等到当完整个File才结束。因此就死在那里。 然后我在 IdComponent 里增加一个 TWorkingEvent ,将它放到那个 Loop里,然后在主程式里,可以在这个Event里放入 Application.ProcessMessage。 但我改了SOURCE后,居然在 IdTrivalFtp这个元件里,并不出现这个Event,在DELPHI IDE的Object Inspector里看不到有这个Event. 努力中......
turboted
版主


發表:95
回覆:754
積分:452
註冊:2002-07-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-30 22:44:35 IP:218.166.xxx.xxx 未訂閱
請你到 http://www.nevrona.com/Indy/dowload/Indy8.html download demo..裏面有Indy TrivialFTP client&server 其實裏面還是有一還event要處理的,並不是像你這樣只要放上元件就好了 你可以先試看看
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-05-30 22:59:00 IP:218.17.xxx.xxx 未訂閱
引言: 請你到 http://www.nevrona.com/Indy/dowload/Indy8.html download demo..裏面有Indy TrivialFTP client&server 其實裏面還是有一還event要處理的,並不是像你這樣只要放上元件就好了 你可以先試看看
如果仅仅在客户端的 OnWork事件里加一个 Application.ProcessMessage,好半天才会有反应。 现在我是改了 IdComponent,增加了一个事件。然后在 TTrivialFtp元件的Source里,在那个 while true do里增加了这个新增加的事件,然后在主程序里,在这个事件中写了一个Application.ProcessMessage,现在我做 Get 操作,客户端程序的界面不会死在那里了。 但Get一个文件,好长时间才触发一次 OnWork,才取出一包。默认的一包是1500。奇怪的是,我用Sniffer观察,网络上SERVER发来的1514长度的包,每秒发出几十个。但客户端居然几十秒才触发一次OnWork。GET一个200K的文件,居然要好几十分钟。 谢谢你的提示,我把那个DEMO当下来看看。
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-05-30 23:28:07 IP:218.17.xxx.xxx 未訂閱
引言: 請你到 http://www.nevrona.com/Indy/dowload/Indy8.html download demo..裏面有Indy TrivialFTP client&server 其實裏面還是有一還event要處理的,並不是像你這樣只要放上元件就好了 你可以先試看看
报告一下最后测试结果: 客户端几十秒才触发一次 OnWork的原因,不是因为程序问题。是因为我做测试,要分开2台电脑。我采用了 VMWare的虚拟机里的WIN2K,把服务器放在虚拟机里了。结果220K的数据传了60分钟。 然后,现在我换过来,把SERVER放在本地机器里,把CLIENT放到VMWARE的WIN2K里,结果只要7秒。 估计是VMWARE的问题。 再次谢谢turboted兄。
turboted
版主


發表:95
回覆:754
積分:452
註冊:2002-07-23

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-05-31 00:11:57 IP:218.166.xxx.xxx 未訂閱
沒關係 問題解了就好 我剛才也試完了一下 還滿正常的 也許真的是您VMWARE的問題 有問題可以再提出來大家互相研究
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-05-31 00:59:35 IP:218.17.xxx.xxx 未訂閱
引言: 沒關係 問題解了就好 我剛才也試完了一下 還滿正常的 也許真的是您VMWARE的問題 有問題可以再提出來大家互相研究
问题又来了。 一开始,我把SERVER放在 VMWARE的WIN2K里,GET一个220K的文件用了60分钟。 然后,当我把CLIENT放到VMWARE的WIN2K里,SERVER放到本地的WIN2K里,GET同样的文件只用了7秒。因此,我认为问题解决了。 然后,我用2台真实的WIN2K的机器来做实验。这样就可以避免VMWARE的原因。结果,多次实验下来,发现有时候很快,有时候却还是很慢。快的时候大概7、8秒。慢的时候大概10分钟。 另外,PUT的问题还存在。我自己写的DEMO,和当下来的INDY8的DEMO里的DEMO,PUT文件到SERVER,SERVER都会出 Cann't create file的错误。提示是有另外一个进程已经将文件打开。当然,我能够保证那个文件是新的,没有第2个程序正在打开它。那么,问题在哪里呢?
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-10-09 12:28:02 IP:218.18.xxx.xxx 未訂閱
为了用UDP来传文件,因为这个TrivalFtp不能用,我自己些了丢包重传的代码来解决这个问题。经过测试用UDP来传文件,速度还是不错的。
系統時間:2024-05-07 11:42:00
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!