C# 基础连接已关闭。服务器违反了协议

C# 基础连接已关闭。服务器违反了协议,c#,ssl,ftpwebrequest,filezilla,ftps,C#,Ssl,Ftpwebrequest,Filezilla,Ftps,我正在尝试使用以下代码获取FTPS FileZilla服务器的目录列表: ftpRequest = (FtpWebRequest)FtpWebRequest.Create(host + "/" + directory); ftpRequest.EnableSsl = true; ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateCer

我正在尝试使用以下代码获取FTPS FileZilla服务器的目录列表:

ftpRequest = (FtpWebRequest)FtpWebRequest.Create(host + "/" + directory);
ftpRequest.EnableSsl = true;

ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateCertificate);
ftpRequest.Credentials = new NetworkCredential(user, pass);
ftpRequest.UseBinary = true;
ftpRequest.UsePassive = true;
ftpRequest.KeepAlive = true;
ftpRequest.Method = WebRequestMethods.Ftp.ListDirectory;
ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
执行
FtpWebResponse)ftpRequest.GetResponse()
时出现异常:

基础连接已关闭。服务器提交了一个协议 违反

当我切换到正常的FTP连接时。一切正常

我是否错过了建立此FTPS连接的内容?
感谢您的帮助隐式FTP不受
FtpWebRequest
类的支持(请参阅)

EnableSsl
设置为true时,它实际上会向服务器触发
AUTH TLS
命令,请求启动显式FTPS会话


在您的情况下,必须将Filezilla服务器配置为使用显式FTP。该过程记录在

上。我遇到了相同的问题,但在ftpWriter.Close()上上载文件时遇到了同样的问题。 此外,例如,在成功完成PrinWorkingDirectory之后,我无法执行GetRequestStream

问题似乎是帖子中的一个“Expect:100 continue”(期望:100继续)——虽然我没有完全检查这个问题,但问题就在那里的某个地方

我已经尝试了互联网上的每一个解决方案:将KeepAlive更改为true,添加到App.Config文件

<system.net>
    <settings>
        <servicePointManager expect100Continue="false"/>
        <httpWebRequest useUnsafeHeaderParsing="true"/>
    </settings>
</system.net>

什么都没用

我花了很多时间尝试其他不同的第三方库(我不太喜欢这个想法),直到最后我得到了一个使用相同类和方法但有效的代码!! 在分析代码之后,我终于发现:代码的目标是.NET Framework 2.0,而我的代码的目标是.NET Framework 4.5。 我觉得微软在从Framework3.5过渡到Framework4的过程中犯了一个小错误

由于它不是将新项目转换为旧框架的解决方案,因此可以为FTP操作创建dll,指向3.5.NET framework,或者使用第三方库


我可能有点晚了,但这可能会在将来帮助其他沮丧的开发人员解决这个问题。

现在是从ftp迁移到sftp的时候了
您可以遵循以下代码参考:

using Renci.SshNet;
using System.IO;
     private void UploadFileToSFTP()
            {
                try
                {
                    String sourcefile = @"C:\path\file.txt"; 
                    String host = @"000.000.000.0"; 
                    String username = @"usename"; 
                    String password = @"password"; 
                    int port = 22;
                    string destinationpath = "/var/www/html/path/public/destinationfolder";
                    using (SftpClient client = new SftpClient(host, port, username, password))
                    {
                        client.Connect();
                        client.ChangeDirectory(destinationpath);
                        using (FileStream fs = new FileStream(sourcefile, FileMode.Open))
                        {
                            client.BufferSize = 4 * 1024;
                            client.UploadFile(fs, Path.GetFileName(sourcefile));
                        }
                    }
        }
                catch (Exception)
                {
                    throw;
                }
            }
希望它能帮助另一个像我一样受苦受难的人。
谢谢大家!

您有权访问Filezilla服务器吗?你确定证书有效吗?您是否将其正确配置为使用显式FTPS是的,我有权访问服务器。该证书也是有效的,并且已检查显式FTPS。我使用的端口990引用隐式SSL/TLS连接。FtpWebRequest支持它吗?没错。我将考虑尝试第三方库同时使用显式/隐式FTPS会话。谢谢你的帮助。我会。。。再次感谢您的支持和帮助。祝您有个美好的一天!如果这是客户端中的一个bug,我想知道为什么只有在连接到filezilla服务器时才会发生这种情况?我的代码可以与其他服务器配合使用