[背景]
我們項目中用到XceedFtp這個FTP組件來下載資料.但是由於我們的檔案比較多每次下載過程中都會時不時的卡死,
也沒有任何異常拋出,就一直卡在ReceiveFile這個方法上,試過很多辦法,但是一直都沒解決.....困擾了我們好長時間.
[解決方案]
今天嘗試修改這個bug時,只是把這個ftp的模式改為主動就解決了.....當時是超鬱悶啊...
_oFtp.PassiveMode = false;
這個暫時在區域網路內測試十多次都沒出現卡死的問題,等在公網測試結束再來補充.
究其原因還是對ftp的原理不是很瞭解吧,順便補充一下ftp主動和被動模式的區別摘自
http://www.moon-soft.com/program/bbs/readelite1095089.htm
[FTP兩種工作模式]
主動模式(Active FTP)和被動模式(Passive FTP)
在主動模式下,FTP用戶端隨機開啟一個大於1024的連接埠N向伺服器的21號連接埠發起串連,然後開放N+1號連接埠進行監聽,並向伺服器發出PORT N+1命令。伺服器接收到命令後,會用其本地的FTP資料連接埠(通常是20)來串連用戶端指定的連接埠N+1,進行資料轉送。
在被動模式下,FTP庫戶端隨機開啟一個大於1024的連接埠N向伺服器的21號連接埠發起串連,同時會開啟N+1號連接埠。然後向伺服器發送PASV命令,通知伺服器自己處於被動模式。伺服器收到命令後,會開放一個大於1024的連接埠P進行監聽,然後用PORT P命令通知用戶端,自己的資料連接埠是P。用戶端收到命令後,會通過N+1號連接埠串連伺服器的連接埠P,然後在兩個連接埠之間進行資料轉送。
總的來說,主動模式的FTP是指伺服器主動串連用戶端的資料連接埠,被動模式的FTP是指伺服器被動地等待用戶端串連自己的資料連接埠。
被動模式的FTP通常用在處於防火牆之後的FTP客戶訪問外界FTp伺服器的情況,因為在這種情況下,防火牆通常配置為不允許外界訪問防火牆之後主機,而只允許由防火牆之後的主機發起的串連請求通過。因此,在這種情況下不能使用主動模式的FTP傳輸,而被動模式的FTP可以良好的工作。