我的处境非常令人沮丧。我需要使用FTP从某些特殊的硬件中检索列表,删除和上传文件。我所有的开发工作都是在连接到神秘盒子上的远程计算机上进行的。据我了解,该盒子可以在嵌入式软件上运行。我可以通过FTP将其发送到框的唯一方法是使用cmd并调用ftp.exe,传递ip并按Enter,然后输入,这意味着没有凭据。然后,我可以做ls。放置并删除。但是,我需要做一个dll,稍后再从hta / javascript gui中调用它,它将像这样使用:var ftp = new ActiveXObject("Mission.FTP")
var list = ftp.ls(hostIP);
但是我尝试从C#执行的任何操作都会返回以下错误:
远程服务器返回错误:202命令未实现。
失败的C#代码是:
FtpWebRequest request = CreateRequest(url, WebRequestMethods.Ftp.ListDirectory);
using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
它在GetResponse()方法处失败。
FTP不是标准协议。为什么ftp.exe与执行FTP的C#方法会有不同的结果?
最佳答案
按照上面的建议启用网络跟踪,我能够找到问题的确切原因。
通过查看日志:
System.Net Information: 0 : [9188] FtpControlStream#42866877 - Sending command [PASV]
System.Net.Sockets Verbose: 0 : [9188] Data from Socket#52434070::Send
System.Net.Sockets Verbose: 0 : [9188] 00000000 : 50 41 53 56 0D 0A : PASV..
System.Net.Sockets Verbose: 0 : [9188] Exiting Socket#52434070::Send() -> Int32#6
System.Net.Sockets Verbose: 0 : [9188] Socket#52434070::Receive()
System.Net.Sockets Verbose: 0 : [9188] Data from Socket#52434070::Receive
System.Net.Sockets Verbose: 0 : [9188] 00000000 : 32 30 32 20 43 6F 6D 6D-61 6E 64 20 6E 6F 74 20 : 202 Command not
System.Net.Sockets Verbose: 0 : [9188] 00000010 : 69 6D 70 6C 65 6D 65 6E-74 65 64 2E 0D 0A : implemented...
System.Net.Sockets Verbose: 0 : [9188] Exiting Socket#52434070::Receive() -> Int32#30
System.Net Information: 0 : [9188] FtpControlStream#42866877 - Received response [202 Command not implemented.]
System.Net.Sockets Verbose: 0 : [9188] Socket#52434070::Dispose()
System.Net Information: 0 : [9188] FtpWebRequest#7224250::(Releasing FTP connection#42866877.)
System.Net Error: 0 : [9188] Exception in FtpWebRequest#7224250::GetResponse - The remote server returned an error: 202 Command not implemented.
解决问题的方法很简单:
request.UsePassive = false;