2011-02-16 115 views
3

,Ftp協議沒有實現,所以我自己開發了它。Compact Framework中的C# - Ftp協議實現

我有一個關於被動模式和需要有數據通道來讀取響應的命令的問題。

在我的情況,我想檢索(RETR)我的FTP服務器上的文件,所以我做的:行之有效

部分:

  • OpenControlChannel
  • ReadControl(橫幅消息)
  • SendUser
  • ReadControl(等待通?)
  • SendPass
  • ReadControl(歡迎詞)
  • SendPassive
  • ReadControl(摘錄IP爲DataChannel)不工作得很好(但工作太,見下文解釋)

零件

  • RETR myFile
  • OpenDataChannel
  • ReadControl(這裏我變成了消息「Begin Transfert」AND 「Transfert完成」,讀 任何數據之前!)
  • READDATA
  • CloseDataChannel
  • CloseControlChannel

問題是,我只需要打開數據通道有消息 「Transfert完成」,甚至如果我沒有讀取任何數據流,這種行爲是否正常?

對我來說,當我打開數據信道我應該只接收

「150打開ASCII模式數據用於a.she(0字節) 連接。\ r \ n」 個

然後,一旦讀操作完成:

「226傳輸完成\ r \ n」。

當我看到在.NET框架中使用的經典的ftp協議,它是這樣的:

FtpWebResponse ftpres = (FtpWebResponse)ftp.GetResponse(); 
// ftpres.StatusDescription = "150 Opening ASCII mode data connection for a.she (0 bytes).\r\n" 
string res = new StreamReader(ftpres.GetResponseStream()).ReadToEnd(); 
// ftpres.StatusDescription = "226 Transfer complete.\r\n" 

希望我足夠清楚... 謝謝!

+0

只需要一個註釋 - 正確處理數據連接需要一堆技巧,所以通常使用一些現有的FTP組件對於.NET CF來說,編寫自己的代碼更有意義。 – 2011-02-16 10:19:13

回答

0

我認爲這種行爲是正常的,它預先在服務器端的緩存中加載數據併發送消息,以便說數據可用並加載。

這是因爲當數據通道2個服務器(而不是客戶機/服務器模式)之間,用戶應該現在當傳輸完成,所以只能採取這種緩存看看...

(編輯:在某些情況下,我看到消息處於良好狀態(只有一次數據讀取),奇怪......)