Indy TrivialFTP的问题 |
答題得分者是:turboted
|
pcplayer99
尊榮會員 發表:146 回覆:790 積分:632 註冊:2003-01-21 發送簡訊給我 |
大家好! 我在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 發送簡訊給我 |
|
pcplayer99
尊榮會員 發表:146 回覆:790 積分:632 註冊:2003-01-21 發送簡訊給我 |
引言: 如果方便的話,把程式上傳讓我們看看那裏生病了吧 >>< 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 發送簡訊給我 |
|
pcplayer99
尊榮會員 發表:146 回覆:790 積分:632 註冊:2003-01-21 發送簡訊給我 |
引言: 請你到 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 發送簡訊給我 |
引言: 請你到 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 發送簡訊給我 |
|
pcplayer99
尊榮會員 發表:146 回覆:790 積分:632 註冊:2003-01-21 發送簡訊給我 |
引言: 沒關係 問題解了就好 我剛才也試完了一下 還滿正常的 也許真的是您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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |