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

C#中使用FTPClient向大型机FTP执行STOR命令遇超时问题求助

问题根源

直接调用Execute("STOR " + file)是错误的。STOR是需要建立数据连接传输文件内容的FTP命令,而Execute方法仅负责发送FTP命令本身,不会处理后续的数据读写逻辑,导致数据连接一直等待传输超时。

修复方案

替换Execute执行STOR的逻辑,使用FtpClient专门的文件上传方法(如UploadFile),这类方法会自动处理数据连接的建立、文件内容传输和连接关闭,避免超时问题。

修改后的代码示例:

using (FtpClient ftp = new FtpClient())
{
    ftp.Host = host;
    ftp.InternetProtocolVersions = FtpIpVersion.IPv4;
    ftp.Credentials = new NetworkCredential("login", "pass");
    ftp.DataConnectionType = FtpDataConnectionType.PASV;
    ftp.EncryptionMode = FtpEncryptionMode.None;
    ftp.Port = 21;                    
    ftp.Connect();

    // 验证SITE命令执行结果
    FtpReply siteReply = ftp.Execute("SITE FILETYPE=JES");
    if (!siteReply.Success)
    {
        throw new InvalidOperationException($"SITE命令执行失败: {siteReply.Message}");
    }

    // 使用UploadFile上传JCL文件,自动处理数据连接
    // 目标路径在JES模式下可指定作业名,或用/dev/null(依大型机配置而定)
    ftp.UploadFile(file, "/dev/null");

    ftp.Disconnect();
}
额外建议
  • 编码与传输模式:大型机JCL通常使用EBCDIC编码,若本地文件是ASCII格式,需设置FTP数据类型为ASCII:ftp.SetDataType(FtpDataType.ASCII);,让服务器自动完成编码转换。
  • 防火墙检查:PASV模式下,大型机FTP服务器会开放随机端口用于数据传输,需确保客户端与服务器之间的防火墙允许该端口范围的流量,否则也会引发超时。
  • 作业名指定:若需自定义作业名,可将UploadFile的目标参数替换为你想要的作业名(如"MYJOB01"),部分大型机FTP服务器支持通过此方式指定提交的作业名称。

内容的提问来源于stack exchange,提问作者Dances with Macs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 21:23:16