【发布时间】:2011-02-18 05:24:21
【问题描述】:
在 Compact Framework 中,没有实现 Ftp 协议,所以我自己开发了。
我有一个关于被动模式和需要数据通道来读取响应的命令的问题。
就我而言,我正在尝试检索(RETR)我的 FTP 服务器上的文件,所以我这样做了:
运作良好的部分:
- 开放控制频道
- ReadControl(横幅消息)
- 发送用户
- ReadControl(等待通过?)
- 发送密码
- ReadControl(欢迎信息)
- 被动发送
- ReadControl(为 DataChannel 提取 IP)
不能很好工作的部分(但也能工作,请参阅下面的说明)
- 返回我的文件
- 开放数据通道
- ReadControl(这里我变成消息“Begin Transfert”并且 “传输完成”,在阅读之前 任何数据!)
- 读取数据
- 关闭数据通道
- 关闭控制频道
问题是,即使我没有读取流上的任何数据,我只需要打开数据通道即可获得“传输完成”消息,这种行为是否正常?
对我来说,当我打开数据通道时,我应该会收到
"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"
希望我足够清楚... 谢谢!
【问题讨论】:
-
请注意 - 正确处理数据连接需要一系列技巧,因此通常使用一些现有的 .NET CF FTP 组件比尝试编写自己的组件更有意义。
-
也许是的,但这不是问题 ;-)
-
@Eugene 除了它不处理像 MVS 这样的服务器所需的一些特殊命令。
标签: c# ftp network-protocols