You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用C# FtpWebRequest连接IBM大型机时遭遇227被动模式错误

解决C# FtpWebRequest上传IBM主机报227被动模式错误的方案

核心原因

IBM Mainframe的FTP服务器返回的被动模式地址格式可能不符合FtpWebRequest的解析预期,而WinSCP针对这类服务器做了兼容性适配,因此能正常工作。

具体解决方法

1. 切换到主动传输模式(PORT模式)

多数IBM主机的FTP服务器支持主动模式,只需修改FtpWebRequest的被动模式设置即可规避地址解析问题:

// 在你的FtpWebRequest初始化代码中添加这一行
request.UsePassive = false;
// 同时确保开启二进制传输(IBM主机通常要求)
request.UseBinary = true;

主动模式下由客户端发起数据连接请求,无需解析服务器返回的被动模式地址,直接绕开解析兼容性问题。

2. 使用WinSCP .NET组件替代FtpWebRequest

既然WinSCP控制台能正常工作,直接复用其成熟的兼容逻辑是最可靠的方案,示例代码如下:

using WinSCP;

// 配置会话参数
var sessionOptions = new SessionOptions
{
    Protocol = Protocol.Ftp,
    HostName = "你的IBM主机地址",
    UserName = "FTP用户名",
    Password = "FTP密码",
};

using (var session = new Session())
{
    // 建立连接
    session.Open(sessionOptions);
    
    // 配置传输选项(强制二进制模式)
    var transferOptions = new TransferOptions
    {
        TransferMode = TransferMode.Binary
    };
    
    // 执行上传
    var transferResult = session.PutFiles("本地文件路径", "主机目标路径", false, transferOptions);
    // 检查上传结果
    transferResult.Check();
}

该方案直接复用WinSCP对IBM主机FTP的适配逻辑,完全避免FtpWebRequest的解析缺陷。

3. 自定义被动模式地址解析(进阶方案)

若必须使用FtpWebRequest且保留被动模式,需手动处理地址解析:

  • 通过反射或继承修改FtpWebRequest的内部解析逻辑
  • 捕获服务器返回的227响应,手动解析IBM主机特有的地址格式(比如处理带额外分隔符或括号的地址字符串)
    此方案复杂度较高,仅在无法切换模式或组件时考虑使用。

关键注意事项

  • IBM主机FTP几乎都要求二进制传输,务必确保代码中开启对应设置,避免文件传输后损坏
  • 切换主动模式时,需确认客户端网络防火墙允许主动模式的数据端口连接(默认由服务器指定,部分环境需开放端口范围)

内容的提问来源于stack exchange,提问作者Albert Torres

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 10:40:33