我在使用标题中的库射击此问题时看到了数十个示例。我看到应该有效的常见示例是:
string destinationPath = PathInfo.FileNameConvention;
using (FileStream fileStream = File.OpenRead(sourcePath))
{
using (Stream ftpStream = FTPClient.OpenWrite(string.Format("'{0}'", destinationPath), FtpDataType.ASCII))
{
fileStream.CopyTo(ftpStream);
}
}
执行此代码时,我会在ftptrace日志上获得名称长度错误。当我仅使用目标路径时,我会出现一个超时错误。我要发送到大型机MVS OS。我可以连接并登录正常。能够通过ftpclient.ececute方法提交站点命令。出于好奇,我也尝试通过执行方法提交一个put命令,并获得了未知命令。有人也有这个问题吗?
我还可以通过CMD提示FTP手动提交文件,并且成功。
一些背景信息,库的openwrite方法使用发送的路径发送stor命令,并将默认为二进制类型。
检查您是否配置了FTP库以使用活动模式(或在防火墙和大型机中启用FTP被动模式)
长答案:FTP协议使用两个连接,一个从客户端到服务器的命令连接,以及一个可以从客户端到服务器(被动模式)或服务器连接到客户端的数据连接(活动模式)。
使用错误模式将导致未配置该模式的防火墙删除数据连接,这将导致您遇到的超时错误。
由于Windows FTP.EXE仅支持活动模式,并且您没有在代码中设置模式,因此我猜想大型机已配置为Active模式,而FTP库默认为被动模式。现在,被动模式非常普遍,因为Active模式与NAT-ENG路由器无法正常工作。
检查是否存在更改传输模式的配置设置,但是如果图书馆仅支持被动模式。
,请不要感到惊讶。更多信息:
主动和被动FTP之间有什么区别?
网络地址转换(NAT):https://en.wikipedia.org/wiki/network_address_translation