我有一个关于被动模式和需要有数据通道来读取响应的命令的问题。
就我而言,我正在尝试在我的FTP服务器上检索(RETR)文件,所以我这样做:
运作良好的部分:
部件不能很好地工作(但也可以工作,请参阅下面的说明)
问题是,即使我没有读取流上的任何数据,我只需打开数据通道即可获得“Transfert complete”消息,这种行为是否正常?
对我来说,当我打开数据频道时,我应该收到
“150打开ASCII模式数据 连接a.she(0字节)。\ 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"
希望我足够清楚...... 谢谢!
答案 0 :(得分:0)
我认为这种行为是正常的,它会在服务器端的缓存中预加载数据并发送消息,以便说明数据可用并加载。
这是因为当数据通道位于2个服务器之间(而不是客户端/服务器模式)时,用户现在应该在传输完成时,所以它只能查看此缓存......
(编辑:在某些情况下,似乎我收到的信息顺序良好(只读过一次数据),很奇怪......)