簡體   English   中英

C# - Ftp協議實現

[英]C# - Ftp protocol implementation

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

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

就我而言,我正在嘗試在我的FTP服務器上檢索(RETR)文件,所以我這樣做:

適用的部分:

  • OpenControlChannel
  • ReadControl(橫幅消息)
  • SendUser
  • ReadControl(等待通行證?)
  • SendPass
  • ReadControl(歡迎辭)
  • SendPassive
  • ReadControl(為DataChannel提取IP)

部件不能很好地工作(但也可以工作,請參閱下面的說明)

  • RETR myFile
  • OpenDataChannel
  • ReadControl(在這里,我在閱讀任何數據之前成為“Begin Transfert”和“Transfert complete”的消息!)
  • READDATA
  • CloseDataChannel
  • CloseControlChannel

問題是,即使我沒有讀取流上的任何數據,我只需打開數據通道即可獲得“Transfert complete”消息,這種行為是否正常?

對我來說,當我打開數據通道時,我應該收到

“150打開a.she(0字節)的ASCII模式數據連接。\\ r \\ n”

然后一旦讀取操作完成:

“226轉移完成。\\ r \\ n”

當我查看.NET Framework中使用的經典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"

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

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

這是因為當數據通道位於2個服務器之間(而不是客戶端/服務器模式)時,用戶現在應該在傳輸完成時進行,因此只需查看此緩存...

(編輯:在某些情況下,似乎我收到了良好的消息(只有一次數據讀取),奇怪......)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM