我的处境非常令人沮丧。我需要使用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;

10-05 20:57
查看更多